Nodejs express 3.x升级到4.x后,post请求处理的问题

Nodejs express 3.x升级到4.x后,post请求处理的问题

在express3.x的时候,处理post请求只需要 app.use(express.bodyParser({keepExtensions: true, uploadDir: ‘/tmp/’})); 这样req.body.name就能取到值 而升级到了4.x后 req.body.name是undefined,无法取值了 请问4.x是怎么处理post请求过来的数据的呢?

6 回复

Node.js Express 3.x 升级到 4.x 后 POST 请求处理的问题

在 Express 3.x 中,处理 POST 请求非常简单。你只需使用 express.bodyParser() 中间件来解析请求体中的数据。例如:

var express = require('express');
var app = express();

app.use(express.bodyParser({ keepExtensions: true, uploadDir: '/tmp/' }));

app.post('/submit', function(req, res) {
    console.log(req.body.name); // 这里可以获取到表单提交的数据
    res.send('Data received');
});

app.listen(3000);

然而,当你将应用从 Express 3.x 升级到 4.x 后,你会发现 req.bodyundefined。这是因为 Express 4.x 移除了内置的中间件(如 bodyParser),并且你需要手动安装并使用第三方中间件来处理请求体。

解决方案

为了在 Express 4.x 中正确处理 POST 请求,你需要安装 body-parser 模块,并将其作为中间件使用。以下是具体的步骤和代码示例:

  1. 安装 body-parser

    npm install body-parser --save
    
  2. 更新你的 Express 应用代码

    var express = require('express');
    var bodyParser = require('body-parser');
    var app = express();
    
    // 使用 body-parser 中间件来解析请求体
    app.use(bodyParser.urlencoded({ extended: true }));
    app.use(bodyParser.json());
    
    app.post('/submit', function(req, res) {
        console.log(req.body.name); // 现在可以获取到表单提交的数据
        res.send('Data received');
    });
    
    app.listen(3000, function() {
        console.log('Server is running on port 3000');
    });
    

解释

  • bodyParser.urlencoded({ extended: true }):用于解析 URL 编码的请求体(如 application/x-www-form-urlencoded)。
  • bodyParser.json():用于解析 JSON 格式的请求体(如 application/json)。

通过这种方式,你可以确保在 Express 4.x 中正确地处理 POST 请求,并且可以访问到请求体中的数据。


好像已经没有 express.bodyParser() 了。加载个 body-parser应该可以解决。

我明白了,谢谢你

不行,body-parser的readme说了,不处理form-data方式的post了

在Express 4.x中,body-parser不再作为内置中间件包含在内,而是需要单独安装并引入。这是因为Express 4.x提倡模块化设计,每个功能都可以独立选择是否使用。

解决方案

你需要安装body-parser模块,并在应用中手动配置它。以下是具体步骤:

  1. 安装body-parser

    打开命令行工具,运行以下命令安装body-parser

    npm install body-parser --save
    
  2. 在应用中引入并使用body-parser

    在你的Express应用文件中(通常是app.jsserver.js),引入body-parser,并将其配置为中间件:

    const express = require('express');
    const bodyParser = require('body-parser');
    
    const app = express();
    
    // 使用body-parser中间件解析POST请求中的数据
    app.use(bodyParser.urlencoded({ extended: true }));
    app.use(bodyParser.json());
    
    // 示例路由
    app.post('/submit', (req, res) => {
        console.log(req.body); // 现在req.body应该正确地包含了POST数据
        res.send('Data received!');
    });
    
    const PORT = process.env.PORT || 3000;
    app.listen(PORT, () => {
        console.log(`Server is running on port ${PORT}`);
    });
    

关键点解释

  • bodyParser.urlencoded({ extended: true }): 解析URL编码格式的请求体,extended: true表示使用qs库来解析,支持嵌套的对象。
  • bodyParser.json(): 解析JSON格式的请求体。
  • req.body: 现在应该能正确获取到POST请求中的数据。

通过这种方式,你可以确保Express 4.x版本能够正确地处理POST请求的数据。

回到顶部