【问题标题】:How to create a RESTful MeteorJS application如何创建一个 RESTful MeteorJS 应用程序
【发布时间】:2015-08-15 13:16:12
【问题描述】:

我一直在努力解决这个问题已经有一天了。甚至在这里发布了关于特定软件包的两个问题(iron-routerRestivus),但我没有成功。

我的情况是这样的:我有一个 Meteor JS 应用程序,它必须接收 http POST 调用才能在它的 MongoDB 数据库中插入一条记录,但是我无法通过 MeteorJS 和世界其他地方之间的连接。

我已经尝试过 Iron-router、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 调用时都得到了相同的结果。我总是得到似乎是带有完整<head> 但空<body> 标记的空模板的HTML 代码。当我尝试对 webapp 中的任何路径使用 GET 和 POST 方法时,我得到了相同的结果。

由于两种情况下的错误相同,我假设我在路由的某一点犯了我的错误,所以这里遵循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(我制作的一个小型 Rub​​y 脚本)和 REST 控制台尝试了 GET 和 POST 方法。结果在所有 3 个实例中都是相同的。

【问题讨论】:

  • 我看过,但没试过。老实说,我对它的工作原理有点困惑,找不到它的工作示例。
  • 我在这里留下了一条评论,解释了您的 Restivus 实施有什么问题:stackoverflow.com/questions/30581774/…。很抱歉,您在 Meteor 中设置 REST API 时遇到了很多困难。你最终使用了什么?

标签: node.js mongodb rest http meteor


【解决方案1】:

使用 Iron-Router 的服务器端路由怎么样?

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

【讨论】:

    猜你喜欢
    • 2017-01-25
    • 1970-01-01
    • 1970-01-01
    • 2015-06-09
    • 2015-05-16
    • 2017-04-14
    • 2017-07-06
    • 1970-01-01
    • 2016-10-05
    相关资源
    最近更新 更多