NodeJS http服务端获取POST请求数据

http服务

我们知道,使用nodejs标准库的http模块创建一个http服务很简单,如下:

const http = require('http');

const hostname = '127.0.0.1';
const port = 3000;

const server = http.createServer((req, res) => {
    res.statusCode = 200;
    res.setHeader('Content-Type', 'text/plain');
    res.end('Hello World');
});

server.listen(port, hostname, () => {
    console.log(`Server running at http://${hostname}:${port}/`);
});

http.createServer传了一个回调函数作为参数,每当一个请求进来时,会产生一个request事件,从而让该回调函数被调用一次,该回调函数接收两个参数,req表示请求对象,res表示响应对象,但是需要注意的是,req对象中包含了http请求的所有请求头,但是却不包含Post请求的数据(request body)。

获取请求数据

那么我们如何得到Post请求的数据呢?事实上,请求数据是以流的方式从客户端(浏览器)传到服务端的,当有数据到达时,req对象会产生一个data事件,当数据传输完毕时,req对象会产生一个end事件,因此,我们只需要将data事件中得到的数据暂时保存起来,当end事件产生时表示数据已经传输完,便可以开始使用得到的请求数据,代码示例如下:

const hostname = '127.0.0.1';
const port = 3000;

const server = http.createServer((req, res) => {
    let data = []
    req.on('data', chunk => {
        data.push(chunk)  // 将接收到的数据暂时保存起来
    })
    req.on('end', () => {
        console.log(JSON.parse(data)) // 数据传输完,打印数据的内容
    })
    // res.statusCode = 200;
    // res.setHeader('Content-Type', 'text/plain');
    // res.end('Hello World');
});

server.listen(port, hostname, () => {
    console.log(`Server running at http://${hostname}:${port}/`);
});

使用express

如果使用express的话,就非常方便了,可以使用body-parser直接将body数据解析到req对象中:

const bodyParser = require('body-parser')

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

app.use(bodyParser.json())

app.post('/todos', (req, res) => {
  console.log(req.body)  // 直接通过req对象中的body属性就可以得到请求数据
})
  • 7
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值