NODEJS:我如何阅读Restify的身体参数?

时间:2015-09-14 14:31:30

标签: node.js post restify

我是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' }

1 个答案:

答案 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,因为它会在您构建主体并选择类型时自动添加这些标头。