我读了一篇文章,这篇文章让我相信app.use(express.json())
是app.use(BodyParser.urlenCoded({extended:false}))
的方便替代方案,因为它将解析请求的主体并将其作为对象返回。 然而,由于片断中一些奇怪的原因:
app.use(express.json());
app.use('/add-product',(_req, res, _next) => {
res.send('<form action="/product" method="POST" ><input type="text" name="title"><button
type="submit">Add Product</button>');
});
app.use('/product', (req, res, _next) => {
console.log(req.body);
res.redirect('/');
});
第二个中间件中的console.log(req.body)
在使用app.use(bodyParser.urlencoded({extended:false})
时返回了一个空对象。使用(bodyParser.urlencoded({extended:false})返回了一个通过表单发送的具有正确值的对象。我发现这很难理解,我做错了什么。如果您能给出更好的解释,将不胜感激。谢谢
不,那不正确。 app.use(express.json());
是使用app.use(bodyParser.json());
的替代方案。 事实上,如果您查看源代码,就会发现express.json
只是一个别名。
但是,在您的示例中,您需要解析内容类型application/x-www-form-urlencoded,这就是为什么您需要保留
app.use(BodyParser.UrlenCoded({extended:false})
作为中间件。 有关更多信息,请参见http://expressjs.com/en/resources/middleware/body-parser.html。