如何创建RESTful MeteorJS应用程序

时间:2015-06-01 22:27:03

标签: node.js mongodb rest http meteor

有一天,我一直在反对这个问题。甚至在这里发布了两个关于特定包(iron-routerRestivus)的问题,但我没有成功。

我的情况是这样的:我有一个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个实例中都是相同的。

1 个答案:

答案 0 :(得分:0)

如何使用Iron-Router的服务器端路由?

Router
.route('/api/path', {where: 'server'})
.post(function ()
{
    var req = this.request.body;
});