5.2 KiB
5.2 KiB
id, title, challengeType, forumTopicId, localeTitle
id | title | challengeType | forumTopicId | localeTitle |
---|---|---|---|---|
587d7fb2367417b2b2512bf7 | Use body-parser to Parse POST Requests | 2 | 301520 | Используйте body-parser для разбора POST-запросов |
Description
POST /path/subpath HTTP/1.0Как видите, тело закодировано как строка запроса. Это формат по умолчанию, используемый формами HTML. С Ajax мы также можем использовать JSON для обработки данных, имеющих более сложную структуру. Существует также другой тип кодирования: multipart / form-data. Этот используется для загрузки бинарных файлов. В этом упражнении мы будем использовать урлен-кодированное тело. Для анализа данных, поступающих из запросов POST, вам необходимо установить пакет: body-parser. Этот пакет позволяет использовать серию промежуточного программного обеспечения, которое может декодировать данные в разных форматах. Смотрите документы здесь . Установите модуль body-parser в ваш файл package.json. Тогда потребуйте это наверху файла. Сохраните его в переменной с именем bodyParser.
From: john@example.com
User-Agent: someBrowser/1.0
Content-Type: application/x-www-form-urlencoded
Content-Length: 20
name=John+Doe&age=25
bodyParser.urlencoded({extended: false})
программное обеспечение для обработки URL-кодированных данных возвращается bodyParser.urlencoded({extended: false})
. extended=false
- это параметр конфигурации, который указывает синтаксическому анализатору использовать классическую кодировку. При его использовании значения могут быть только строками или массивами. Расширенная версия обеспечивает большую гибкость данных, но она превосходит JSON. Передайте app.use()
функцию, возвращенную предыдущим вызовом метода. Как обычно, промежуточное программное обеспечение должно быть установлено перед всеми маршрутами, которые в нем нуждаются.
Instructions
body-parser
module in your package.json
. Then, require
it at the top of the file. Store it in a variable named bodyParser
. The middleware to handle urlencoded data is returned by bodyParser.urlencoded({extended: false})
. Pass to app.use()
the function returned by the previous method call. As usual, the middleware must be mounted before all the routes which need it.
Note: extended=false
is a configuration option that tells the parser to use the classic encoding. When using it, values can be only strings or arrays. The extended version allows more data flexibility, but it is outmatched by JSON.
Tests
tests:
- text: The 'body-parser' middleware should be mounted
testString: getUserInput => $.get(getUserInput('url') + '/_api/add-body-parser').then(data => { assert.isAbove(data.mountedAt, 0, '"body-parser" is not mounted correctly') }, xhr => { throw new Error(xhr.responseText); })