Что делает приложение.использовать(bodyParser.json ())` do?

для:

bodyParser.urlencoded({extended: ...})

мои исследования показали мне, что если extended: true, затем вы можете анализировать вложенные объекты или вообще любой тип. Однако, если вы установите extended: false, тогда вы можете анализировать только строки или массивы. Но что делает ...

app.use(bodyParser.json())

значит? То есть, да... Я знаю, что в документах упоминается, что он анализирует json. Но я все еще в замешательстве. Я заметил приложения, которые устанавливают extended: true Не используйте bodyParser.json() на всех. Но приложения, которые extended: false стремятся использовать bodyParser.json(). Почему так? В конце концов, оба приложения могут анализировать json.

во-вторых, какой рекомендуемый подход?

3 ответов


хорошо, вопреки тому, что я ранее думал, дальнейшие исследования показывают, что extended: true и app.use(bodyParser.json()) можно использовать вместе. Так что это не только extended: false, который его использует. Заявление app.use(bodyParser.json()) используется самостоятельно, если вы установите расширенный как true или false.

  • app.use(bodyParser.json()) в основном сообщает системе, что вы хотите использовать json.

  • bodyParser.urlencoded({extended: ...}) в основном сообщает системе, хотите ли вы использовать простой алгоритм для мелкий синтаксический анализ (т. е. false) или сложный алгоритм глубокого анализа, который может иметь дело с вложенными объектами (т. е. true).

посмотрите на документы (т. е. https://expressjs.com/en/guide/migrating-4.html) для примера.


кодировка URL и кодировка JSON позволяют конвертировать (вложенный) объект в строку, но формат отличается. Строка, закодированная URL, как правило, не является допустимой строкой JSON.

одно приложение может использовать один метод кодирования, а другой другое. До тех пор, пока они не смешивают два, это будет работать.


bodyParser.json возвращает промежуточное ПО, которое анализирует только json. Этот парсер принимает любую кодировку Unicode тела и поддерживает автоматическую инфляцию кодировок gzip и deflate.

новый объект тела, содержащий проанализированные данные, заполняется на объекте запроса после промежуточного программного обеспечения (т. е. req.тело.)