Подтвердить что ты не робот

Что делает `app.use(bodyParser.json())` do?

Для:

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

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

app.use(bodyParser.json())

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

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

4b9b3361

Ответ 1

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

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

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

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

Ответ 2

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

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

Ответ 3

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

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