2012-03-28 99 views
22

我正在使用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控制台进行测试,并与内容{"name":"foobar"}

发送事情就这么简单POST /我很沮丧,在这一点上,我开始怀疑我是在安装底座/ CouchDB的时候爆发的东西(这分别安装了NPM和Homebrew)。任何帮助将不胜感激,因为这有些时间敏感。感谢您提前提供任何帮助!

+0

如果尝试app.get('/',function(req,res){res.send('Hello World');};然后执行获取请求? – bryanmac 2012-03-28 05:28:20

回答

69

你提到你张贴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哪个分析器。

+4

我觉得自己像个白痴。我正在使用http-console,并且由于某种原因我猜这些头文件发生了变化!谢谢! – 2012-03-28 22:44:45

+2

我使用的是Postman REST客户端,它在我使用form-data时工作,但在发送raw时不起作用。谢谢 – 2014-02-01 07:41:54

+1

谢谢Nikhil!我和Postman有同样的问题,我们必须设置标头:Content-Type(无冒号)和Value:application/json – 2015-03-09 20:03:57