我今晚正在使用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)时是否破坏了某些东西。任何帮助将不胜感激,因为这有点时间敏感。感谢您提前提供任何帮助!
答案 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/json
,application/x-www-form-encoded
和multipart/form-data
,并根据Content-Type
选择要使用的解析器。