我使用Iron Router为我的Meteor服务器创建了一个HTTP POST端点。我想使用状态和其他元数据的JSON向请求者发送响应。
以下是端点的代码:
.eml
Meteor控制台正在打印:
Router.route('/new_video', {where: 'server'})
.post(function(){
var body = this.request.body;
this.response.setHeader('Content-Type', 'application/json');
var filename = body.filename;
console.log('New video uploaded for: ' + filename);
Meteor.call('newUpload', filename, function(error, results){
if (error){
throw new Meteor.Error("new-video-upload-failed", "New video could not be uploaded.");
var message = {
url: '/new_video',
status: 'success'
};
}
else{
var videoId = results;
console.log('Returned video id: ' + videoId);
var message = {
url: '/new_video',
status: 'failure'
};
}
this.response.end(JSON.stringify(message));
});
});
答案 0 :(得分:2)
这是JS的常见缺陷,由于在this
中引入了另一个函数回调,因此修改了Meteor.call
的值。
如果您使用的是ES2015箭头功能附带的Meteor 1.2,您可以使用此函数声明语法解决问题:
Meteor.call('newUpload', filename, (error, results) => {
// here 'this' will keep referencing the POST route context
// so you can safely use this.response
});
如果您不使用Meteor 1.2,请改用此语法:
Meteor.call('newUpload', filename, function(error, results) {
// inner function is bound to parent function 'this'
}.bind(this));