NODEJS:如何使用 Restify 读取 Body 参数?

NODEJS: How do I read Body Parameters with 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 参数,但我真正想要的是 post 参数作为直接标准参数(如我的示例)或 JSON.我已经尝试了两种方式的请求。

例如这在控制台中给出了相同的响应:

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

我相信我过去也遇到过同样令人沮丧的问题:A missing Content-Type header. Restify 将忽略任何内容,如果header 不存在。您的 JSON 示例应该有: Content-Type: application/json

不确定你的第一个例子,也许 multipart/form-data see this question.

另外:您的 JSON 示例无效 [​​=29=]。您需要在键和值周围加上双引号,如下所示: { "POST_PARAM1": "abc", "POST_PARAM2": "ghi" }

连接和构建此类内容请求的好工具是 Postman,因为它会在您构建 body 并选择类型时自动添加那些 header。