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

我是Node / Restify的新手,在这里一定是错过了一些愚蠢的东西,但是我一直在这个问题上徘徊。 希望有人能帮助。

我试图用restify从POST请求读取Body参数。 我发现的一切似乎表明,我所需要的是server.user(bodyParser()),但它不工作,我不知道为什么,我不知道如何进一步排除故障。

任何人都可以帮我指出我在这里做错了什么吗?

我创build了一个简单的服务器如下:

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

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

不知道你的第一个例子,也许multipart/form-data 看到这个问题。

另外:你的JSON例子不是有效的JSON。 您需要在键和值的左右双引号: { "POST_PARAM1": "abc", "POST_PARAM2": "ghi" }

接口和build立这种types的东西的一个好工具是邮差 ,因为它添加这些头自动时,你build立的身体,并selecttypes。

req.body是一个不透明的对象。 你需要console.log(JSON.parse(req.body)) 。 这是令人困惑的,我知道。 但是挂起来……这是最有趣的节点服务器。