对于传出的HTTP请求(使用meteor.http.call),我可以定义参数和/或数据。然后可以得到结果(通过results.content)。
如何访问和解析传入HTTP请求的正文/内容/数据?
使用铁路由器,我已经达到了这个目的:
Router.map(function () {
this.route('httpTest', {
path: '/httpTest',
action: function () {
var request = this.request;
var response = this.response;
console.log('request_body: '+ request.body);
// request.body does not work. what should it be????
N.B。我知道我可以访问查询参数,但我想从传入的http请求的正文中访问表单数据和/或json数据。
答案 0 :(得分:2)
请求是incoming http message,是Readable Stream,因此您可以通过从该流中读取来获取请求的数据。
以下内容应该有效(但我没有测试过):
var readable = this.request;
var alldata = "";
readable.on('data', function(chunk) {
alldata += chunk;
})
readable.on('end', function() {
console.log('do something with alldata');
});
答案 1 :(得分:1)
由于缺少where: 'server'
,它可能无法正常工作。这是一个有效的例子:
Router.map(function() {
this.route('test', {
where: 'server',
action: function() {
console.log(this.request.body.make);
console.log(this.request.body.model);
this.response.writeHead(200, {'Content-Type': 'text/html'});
this.response.end('hello!\n');
}
});
});
从命令行我可以点击此路线:
curl -X POST -H "Content-Type: application/json" -d '{"make":"honda","model":"civic"}' http://localhost:3000/test
在服务器终端中打印预期的honda
和civic
。看起来this.request.body
已经被解析,因此您可以直接访问任何变量,如果您的输入是json,那就很好。
答案 2 :(得分:1)
为了读取原始主体,没有Node.js JSON-ify,以同步的方式,我使用了这个:
Router.route("my/api", function() {
var rawBody = "";
var chunk;
while ((chunk = this.request.read()) !== null) {
rawBody += chunk;
}
}, { where: "server" });
(这里的另一个答案中提出的异步方式对我没有用,虽然它应该按照Node.js文档)。