【问题标题】:Cannot pull post data from request.body无法从 request.body 中提取帖子数据
【发布时间】:2015-01-31 17:07:38
【问题描述】:

这是我的角度发布请求:

    var webCall = $http({
               method: 'POST',
               url: '/validation',
               async : true,
               headers: {
                 'Content-Type': 'text/html'
               },
               data: {email: "abc@gmail.com"}});
   webCall.then(successHandler, errorHandler);

现在在我的 nodejs 服务器中,以下代码提取帖子数据:

app.post('/validation',function(req,res){
        req.on('data',function(data){
            console.log(data.toString());
        });

但将请求正文安慰为:

app.post('/validation',function(req,res){
    console.log(req.body);
}

控制台空对象。

【问题讨论】:

  • 你检查了吗,你的 javascript 控制台说了什么?我个人使用 $resource 代替 $http 和 router.post/get/put/delete 而不是 app.post... 无论如何粘贴您的 JS 控制台错误日志,让我们看看它说了什么。干杯。
  • 它没有控制台错误。正如我在问题中所说,它只是控制空对象。
  • 你想试试 $resource 吗?然后我可以为您提供一个非常简单的解决方案。
  • 是否可以使用资源进行 ajax 调用?如果是这样,那么确定。我会很感激你的帮助。
  • 您的问题是因为您将标题内容类型设置为text/html。尝试删除$http 中的headers 或将其更改为'Content-Type': 'application/json'

标签: angularjs node.js post express


【解决方案1】:

可能的原因是您没有添加(或在问题中显示)body-parser 中间件。

var bodyParser = require('body-parser');

// for parsing application/json
app.use(bodyParser.json());

// for parsing application/x-www-form-urlencoded
app.use(bodyParser.urlencoded({ extended: true }));

// for parsing multipart/form-data
app.use(multer());

routes 之前为您希望接收的数据添加相关中间件。就您而言,看起来您只需要第一个。此外,正如@themyth92 所指出的,传递正确的标头。

阅读更多here

【讨论】:

  • 原来我使用了错误的内容类型“text/html”而不是“application/json”
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-07-05
  • 1970-01-01
  • 1970-01-01
  • 2020-10-20
  • 2017-06-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多