express中怎么获得前端post过来的数据?

发现一个神奇的东西。
在vue项目中的dev-server.js中写了一个

var data_router = express.Router()
data_router.post('/register',function(req,res){
  console.log('succeed register')
})
...

结果这个console.log()的结果返回到了我的编译器webstorm的底端栏里了,就像是python的print()一样,这是怎么做到的,为什么会显示在这里,好神奇
图片描述


然后我想问就

data_router.post('/register',function(req,res){
    //怎么在这里获得前端Post过来的数据?
})

就在回调函数里面怎么获得post过来的数据(注释位置↑)

阅读 4.7k
3 个回答

以下代码仅供参考啊。

data_router.post('/register',function(req,res){
    var data;
    req.on('data', function(chunk) {  data += chunk; }
    req.on('end', function() {
        console.log(data);
    });
})

req 代表客户端的 HTTP 请求,req 是一个流,用流的方式可以读取请求主体中的数据。

常见方式使用body-parser中间件

安装

npm install --save body-parser

使用


const express = require('express'),
      bodyParser = require('body-parser'),
      app = express();

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

app.use('/').post(
    (req,res)=>{
        res.send(req.body) // 请求对象中的body 即为Post数据 更为详尽的方法 阅读官方文档
    }
);

app.listen(8080);

当然 也可以实现自己的post数据中间件

简化实现代码如下:

app.use((req,res,next) => {
    let data = '';
    req.on('data', chunk => {
        data += chunk;
    });
    req.on('end',()=>{
        req.body = data;
        next();
    })
});

上述代码替换body-parser 即是自己的中间件

另外,你调试台打印的,出现webstorm中是因为webstorm有内置的命令行工具,你可以在这个工具里进行常规的命令行操作。

nodejs 中 有一个 process 的全局变量 ,对应的有 stdout 标准输出 stdin 标准输入, 还有什么貌似是 错误输出 stderr, 这里的 console.log 其实调用的是

Console.prototype.log = (...params)=> process.stdout.write( ...params )

所以就在控制台打印了,和浏览器的那个有点差别.

第二个问题
express 中 大牛们已经帮我们封装的很好了,request,response,next 三个参数,req.body 就拿到了
他实际接受到是个 buffer

const chunks = []
let len = 0
data.on("data",(chunk)=>{
    chunks.push(chunk)
    size+=chunk.length
})
data.on('end',()=>{
    const buf = Buffer.concat(chunks,size)
    console.log(buf.toString());
})
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题