我是Node / Restify的新手并且必须在这里遗漏一些愚蠢的东西,但我已经在这一段时间里一直在敲打我的脑袋。希望有人可以提供帮助。
我试图通过restify从POST请求中读取Body参数。我找到的所有内容似乎都表明我所需要的只是server.user(bodyParser()),但它不起作用而且我不知道为什么,而且我不确定如何进一步排除故障。
任何人都可以帮助我指出我在这里做错的正确方向吗?
我创建了一个简单的服务器,如下所示:
var restify = require('restify');
var server = restify.createServer();
server.use(restify.bodyParser());
server.post("/test", function(req, res){
console.log(req.params);
console.log(req.body);
res.send(200);
res.end();
});
server.listen(8081);
然后我运行了以下POST请求:
POST /test?GET_PARAM=def HTTP/1.1
Host: localhost:8081
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:40.0) Gecko/20100101 Firefox/40.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
Connection: keep-alive
Content-Length: 33
POST_PARAM1=abc&POST_PARAM2=ghi
这导致控制台中出现以下内容:
debugger listening on port 49953
{}
undefined
如果我包含queryParser,我可以毫无问题地获得GET参数,但我真正想要的是作为直接标准参数(如我的示例)或JSON的post参数。我已经尝试了两种方式。
e.g。这在控制台中给出了相同的响应:
POST /test?GET_PARAM=def HTTP/1.1
Host: localhost:8081
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:40.0) Gecko/20100101 Firefox/40.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
Connection: keep-alive
Content-Length: 44
{ POST_PARAM1: 'abc', POST_PARAM2: 'ghi' }
答案 0 :(得分:4)
我相信过去我遇到了同样令人沮丧的问题:缺少Content-Type
标题。如果标题不存在,Restify会忽略任何内容。您的JSON示例应该具有:
Content-Type: application/json
不确定您的第一个示例,可能是multipart/form-data
see this question.
另外:您的JSON示例不是有效的JSON。您需要在键周围使用双引号和值,如下所示:
{
"POST_PARAM1": "abc",
"POST_PARAM2": "ghi"
}
用于连接和构建此类内容请求的好工具是Postman,因为它会在您构建主体并选择类型时自动添加这些标头。