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))
。 这是令人困惑的,我知道。 但是挂起来……这是最有趣的节点服务器。