【问题标题】:Inbuilt body parser for express is return an unexpected resultexpress 的内置正文解析器返回意外结果
【发布时间】:2020-06-23 14:44:45
【问题描述】:

我读了一篇文章,让我相信app.use(express.json())app.use(bodyParser.urlencoded({extended: false})) 的一个方便替代品,因为它会解析请求的主体并将其作为对象返回。但是由于sn-p中的一些奇怪原因:

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}) 返回一个具有通过表单发送的正确值的对象。我发现很难理解,我做错了什么。任何好的解释将不胜感激。谢谢

【问题讨论】:

    标签: node.js json express middleware body-parser


    【解决方案1】:

    不,这是不正确的。 app.use(express.json()); 是使用 app.use(bodyparser.json()); 的替代方法。

    其实如果你看一下source code,你会发现express.json只是一个别名。

    但是,在您的情况下,您需要解析内容类型 application/x-www-form-urlencoded 这就是您需要保留的原因

    app.use(bodyParser.urlencoded({extended: false})

    作为中间件。请参阅http://expressjs.com/en/resources/middleware/body-parser.html 了解更多信息。

    【讨论】:

      【解决方案2】:

      不,app.use(bodyParser.json()) 可以替换为 app.use(express.json()) 并获取表单正文,app.use(bodyParser.urlencoded({extended:false}) 可以替换为方便的 app.use(express.urlencoded()) 在使用 express 4.16 或更高版本时

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-05-27
        • 1970-01-01
        • 1970-01-01
        • 2017-11-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多