【问题标题】:Node (Express) request body empty节点(Express)请求正文为空
【发布时间】:2012-04-11 16:41:11
【问题描述】:

今晚我正在使用 Node.JS 和 Restify 开发一个简单的 API,并且在通过 req.params.fieldname 接收参数方面一切正常。我安装了 CouchDB 和 Cradle,以便开始尝试将这些参数放入数据库中,但在安装完所有内容后 req.params 开始返回为空!

出于其他原因,我应该一开始就使用 Express,所以我尝试切换到它,看看我是否可以让它工作,但没有这样的运气。

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

app.configure(function(){
app.use(express.bodyParser());
app.use(express.cookieParser());
});

app.post('/', function(req, res){
  res.send(req.body);
});

app.listen(8080, function() {
  console.log('Printomatic listening at', app.url);
});

我尝试了无数种变体,但无论什么 req.body 都返回为空。我正在使用 http-console 进行测试,并发送像 POST / 这样简单的内容 {"name":"foobar"}

我非常沮丧,以至于此时我开始怀疑我在安装 Cradle/CouchDB(分别与 NPM 和 Homebrew 一起安装)时是否破坏了某些东西。任何帮助将不胜感激,因为这有点时间敏感。提前感谢您的帮助!

【问题讨论】:

  • 如果你尝试 app.get('/', function(req,res){res.send('Hello World');}; 然后执行 get 请求会发生什么?跨度>

标签: javascript json node.js express


【解决方案1】:

您提到您发布了 JSON 数据 ({"name": "foobar"})。确保你发送Content-Type: application/json ,否则bodyParser 不会解析它。

例如:

$ curl -d 'user[name]=tj' http://local/
$ curl -d '{"user":{"name":"tj"}}' -H "Content-Type: application/json" http://local/

这是因为bodyParser会解析application/jsonapplication/x-www-form-encodedmultipart/form-data,它会根据Content-Type选择使用哪个解析器。

【讨论】:

  • 我觉得自己像个白痴。我正在使用 http-console,我猜由于某种原因标题发生了变化!谢谢!
  • 我使用的是 Postman REST 客户端,它在我使用表单数据时有效,但在发送原始数据时无效。在标题中设置内容类型修复了它。谢谢
  • 谢谢尼基尔!我对 Postman 有同样的问题,我们必须设置标题:Content-Type(无冒号)和值:application/json
  • 为我节省了很多时间和打击 :)。谢谢!
猜你喜欢
  • 2015-06-27
  • 1970-01-01
  • 1970-01-01
  • 2019-06-26
  • 2016-11-12
  • 1970-01-01
  • 2019-10-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多