节点(Express)请求正文为空

时间:2012-03-28 05:22:25

标签: javascript json node.js express

我今晚正在使用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);
});

我尝试了无数的变化,但不管是什么样的请求。我正在使用http-console进行测试,并发送内容为POST /

{"name":"foobar"}之类的简单内容

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

1 个答案:

答案 0 :(得分:71)

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

E.g:

$ 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选择要使用的解析器。