首页 > 解决方案 > 如何在不使用正文解析器的情况下获取 POST 正文

问题描述

module.exports=function(app){
//app is passed in from app.js
//app is a express application


var data=[
   {item:"cheese"},{item:"milk"},{item:"strawberrys"}
 ]
app.get('/todo',function(req, res){
   res.render('todo',{data:data});
});
app.post('/todo',function(req, res){
var data="";
req.on('data', function(chunk){
   data+=chunk;
 });
req.on('end', function(){
    console.log(data);
  })
 });
 }

关于上面代码的几个问题,“数据”是一个可以设置流的事件,并且块函数以块的形式返回流吗?此外,当我从“结束”事件中打印出数据时,它给了我 item=eggs,而我通过的对象是 {item:"eggs"}。为什么它没有给我对象?同样在“数据”事件中,它在字节缓冲区中返回它,但在“结束”事件中,它作为对象返回?

标签: javascriptexpressstreambody-parser

解决方案


这取决于post内容类型

如果您使用以下方式发布:content-type: application/json它将显示 JSON 数据。例子:

POST /todo HTTP/1.1
Host: localhost:8080
Content-Type: application/json

{"key":"value"}

如果您发布使用:content-type: application/x-www-form-urlencoded它将显示key1=value1&key2=value2等。如果您不使用application/json请求将是这样的。

例子:

POST /todo HTTP/1.1
Host: localhost:8080
Content-Type: application/x-www-form-urlencoded

key=value

推荐阅读