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。
我是 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。