流星URL前缀

时间:2013-10-29 10:56:28

标签: meteor underscore.js

Meteor 0.6.6.2存在问题

当我部署生产时。我必须遵循以下错误:

/home/gt/webapps/meteor/bundle/programs/server/boot.js:185
}).run();
   ^
Error: a route URL prefix must begin with a slash
    at _.extend.declare (packages/routepolicy/routepolicy.js:95)
    at new StreamServer (packages/livedata/stream_server.js:23)
    at new Server (packages/livedata/livedata_server.js:980)
    at Package (packages/livedata/server_convenience.js:10)
    at packages/livedata.js:3909:4
    at packages/livedata.js:3920:3
    at /home/gt/webapps/meteor/bundle/programs/server/boot.js:154:10
    at Array.forEach (native)
    at Function._.each._.forEach (/home/gt/webapps/meteor/bundle/programs/server/node_modules/underscore/underscore.js:79:11)
    at /home/gt/webapps/meteor/bundle/programs/server/boot.js:81:5

我的root_url设置为:

导出ROOT_URL ='http://sub.mydomain.com'

我对旧版Meteor没有任何问题。

3 个答案:

答案 0 :(得分:2)

我发现了错误。我调试了routepolicy.js中的路径(在/ bundle / programs / server / app中) 第56行与console.info(urlPrefix)),发现我的导出ROOT_URL不正确。 由于某种原因,我的导出命令(导出ROOT_URL ='http://mydomain.com'未成功,它仍然是ROOT_URL ='mydomain.com')

见: Github问题:https://github.com/meteor/meteor/issues/1404

答案 1 :(得分:0)

您是否在某处使用中间件或服务器端路由?如果是这样,中间件的所有path参数都必须以/开头,因此将some/path更改为/some/path。它在最近的一个版本中开始变得很重要。

顺便说一下,

ROOT_URL不一定以/结尾 - 你的是正确的。

答案 2 :(得分:0)

这是我正在做的支持命名空间路由(使用Iron Router):

lib/namespace.js包含:

Router._mapOld = Router.map;

Router.map = function(namespace, cb) {
    if (_.isFunction(namespace)) {
        cb = namespace;
        return Router._mapOld.call(this, cb);
    }

    namespace = namespace.replace(/\/+$/, '');

    var that       = this;
    that._routeOld = that.route;
    that.route     = function(name, options) {
        if (!_.isString(options.path)) {
            throw new Error(
                'Namespaced routes must have a path specified as a string.');
        }
        return that._routeOld.call(that, name, _.extend(options, {
            path : namespace + options.path
        }));
    };

    var ret = Router._mapOld.call(that, cb);

    that.route = that._routeOld;

    return ret;
};

然后你可以这样做:

Router.map(function() {
    // Add routes normally with no prefix
});

Router.map('/prefix', function() {
    // All routes you add here will be prefixed with /prefix
});