Node.js NODEJS:如何使用Restify读取身体参数?

Node.js NODEJS:如何使用Restify读取身体参数?,node.js,post,restify,Node.js,Post,Restify,我是Node/Restify新手,这里肯定遗漏了一些愚蠢的东西,但我已经在这上面敲了一阵子了。希望有人能帮忙 我正在尝试使用restify从POST请求中读取身体参数。我发现的一切似乎都表明我只需要server.user(bodyParser()),但它不工作,我不知道为什么,我也不确定如何进一步排除故障 有人能帮我指出我做错了什么吗 我创建了一个简单的服务器,如下所示: var restify = require('restify'); var server = restify.cr

我是Node/Restify新手,这里肯定遗漏了一些愚蠢的东西,但我已经在这上面敲了一阵子了。希望有人能帮忙

我正在尝试使用restify从POST请求中读取身体参数。我发现的一切似乎都表明我只需要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
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' }
如果我包括queryParser,我可以毫无问题地获取get参数,但我真正想要的是post参数,可以是直接的标准参数(如我的示例),也可以是JSON。我两方面都试过了

e、 g.这在控制台中给出了相同的响应:

debugger listening on port 49953
{}
undefined
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' }

我相信我在过去也遇到过同样令人沮丧的问题:缺少
内容类型
标题。如果标题不存在,Restify将忽略任何内容。您的JSON示例应该具有:
内容类型:应用程序/json

不确定您的第一个示例,可能是
multipart/formdata

另外:您的JSON示例不是有效的JSON。您需要在键和值周围使用双引号,如下所示:

{ 
“POST_PARAM1”:“abc”,
“后参数2”:“ghi”
}


一个很好的工具,用于连接和构建这类东西的请求,当您构建主体并选择类型时,它会自动添加这些标题。

我相信我在过去也遇到过同样令人沮丧的问题:缺少
内容类型
标题。
如果没有标题,Restify将忽略任何内容。您的JSON示例应该具有:
内容类型:应用程序/json

不确定您的第一个示例,可能是
multipart/formdata

另外:您的JSON示例不是有效的JSON。您需要在键和值周围使用双引号,如下所示:

{ 
“POST_PARAM1”:“abc”,
“后参数2”:“ghi”
}


一个很好的接口和构建此类内容请求的工具是,当您构建主体并选择类型时,它会自动添加这些标题。

@OsmanErdi谢谢,但是req.body是“未定义的”,如果不是,我将尝试以不同的方式解析它。另一个,你是如何在html中发布的?也许,您应该使用server.use(restify.bodyParser({mapParams:false}));要将值放入“req.body”@OsmanErdi,谢谢,但是req.body是“未定义”的,如果不是,我将尝试以不同的方式解析它。另一个,你是如何在html中发布的?也许,您应该使用server.use(restify.bodyParser({mapParams:false}));要将值放入“req.body”中,谢谢,这绝对是正确的。我希望我能早点回到这条线索上来。我昨晚很晚才明白。谢谢你,就是这样。我希望我能早点回到这条线索上来。我昨晚很晚才明白。