我的情况是这样的:我有一个Meteor JS应用程序必须接收http POST调用才能在其MongoDB数据库中插入记录,但是我已经无法通过MeteorJS和世界其他地方。
我已经尝试过铁路由器,Restivus,以及几个小时前,Picker。我已经按照Meteorpedia上的REST API示例进行了操作,并没有获胜。
使用Restivus,我得到了以下代码:
if(Meteor.isServer){
//Must exist, but all options can be empty
Restivus.configure({
});
//Allow Restivus to manage Reports
Restivus.addCollection('reports', {
routeOptions: {},
});
console.log("Inside 'isServer'");
Restivus.addRoute('reports/:message', {
// POST
post: {
action: function(){
console.log("Got to post!");
var response = null;
var message = this.urlParams.message;
if(message){
console.log("Message received: " + message);
return {status: "success", data: message};
} else {
console.log("Message empty...");
return {status: "fail", message: "Post not found"};
}
//Response to caller
return;
}
}
});
}
有了Picker,我得到了这个:
if(Meteor.isServer){
Picker.route('/newReport/:message'), function(params, req, res, rext){
if(req.method == "POST")
console.log("Got a POST");
else
console.log("Not a POST");
res.end("Returned");
}
}
在两次尝试中,我在进行GET调用时得到相同的结果。我总是得到一个似乎是空模板的HTML代码,其中包含完整的<head>
空<body>
标记。当我尝试GET和POST方法到webapp中的任何路径时,我得到相同的结果。
由于两种情况下的错误都是一样的,我假设在我的路由的某一点上我犯了我的错误,所以这里遵循server/router.js
的其余部分:
Router.configure({
layoutTemplate: 'layout',
notFoundTemplate: 'notFound',
waitOn: function(){
return [Meteor.subscribe('reports')]
}
});
//Page of the report
Router.route('/report/:message', {
name: 'reportPage',
data: function(){
return Reports.findOne(this.params.message);
}
})
Router.route('/', {
name: 'reportList'
});
<<REST code goes here>>
我怀疑路由器在某一时刻发送了一个空白页面,但我在路由器信息中看不到任何暗示这一点的内容。
我甚至试图做一个if / else语句来分隔客户端中的所有内容,以及服务器中的所有内容,但它没有任何区别。我会尝试继续更新作为继续测试。
提前谢谢!
注意:我使用curl,我制作的一个小Ruby脚本和REST控制台尝试了GET和POST方法。结果在所有3个实例中都是相同的。
答案 0 :(得分:0)
如何使用Iron-Router的服务器端路由?
Router
.route('/api/path', {where: 'server'})
.post(function ()
{
var req = this.request.body;
});