Use bodyParser.urlencoded(
) middleware:
const bodyParser = require('body-parser');
app.use(bodyParser.urlencoded({ extended: true }));
Then the form values will be on req.body:
app.post('/game', function (req, res) {
res.render('the_template', { name: req.body.name });
});
Setting { extended: true }
allows the bodyParser to accept json like data within the form data including nested objects. e.g. { person: { name: Adam } }
sent using javascript rather than the name value pairs which traditional HTML form send. If you don't need that you can set the extended value to false. Not defining an extended option (i.e. using a default setting) is apparently deprecated and they seem to want you to decide whether you need nested options or plain name value pairs.
If you want to be able to parse form data for some routes and json data for others in your express server, you can use:
app.use(bodyParser.json())
app.use(bodyParser.urlencoded({ extended: <true|false> }))
urlencoded()
for x-www-form-urlencoded content type
true
- for nested data structures
false
- for name value pairs
json()
- for application/json content type
Note that form/multipart needs a different body parser (such as multer)
Update: fix if you get ExpressJS Error about Body-Parser being Deprecated
Replace
app.use(bodyparser.json()); //utilizes the body-parser package
app.use(bodyParser.urlencoded({extended: true}));
By
app.use(express.json()); // Used to parse JSON bodies
app.use(express.urlencoded()); //Parse URL-encoded bodies
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…