2.9 KiB
2.9 KiB
id | title | challengeType | forumTopicId |
---|---|---|---|
587d7fb2367417b2b2512bf7 | Use body-parser to Parse POST Requests | 2 | 301520 |
Description
POST /path/subpath HTTP/1.0
From: john@example.com
User-Agent: someBrowser/1.0
Content-Type: application/x-www-form-urlencoded
Content-Length: 20
name=John+Doe&age=25
As you can see, the body is encoded like the query string. This is the default format used by HTML forms. With Ajax, you can also use JSON to handle data having a more complex structure. There is also another type of encoding: multipart/form-data. This one is used to upload binary files.
In this exercise, you will use a urlencoded body. To parse the data coming from POST requests, you have to install the body-parser
package. This package allows you to use a series of middleware, which can decode data in different formats.
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); })'
Challenge Seed
Solution
/**
Backend challenges don't need solutions,
because they would need to be tested against a full working project.
Please check our contributing guidelines to learn more.
*/