我可以通过__meteor_bootstrap__.app挂载另一个路由处理程序吗?

时间:2012-04-12 08:09:27

标签: meteor

我正在构建我的第一个流星应用程序,并且需要能够创建一个新的路由处理程序来处理oauth回调。我查看了server.js,发现connect.app上下文在 meteor_bootstrap 下可用。虽然这似乎不起作用:

if (Meteor.is_server) {
  Meteor.startup(function () {
    var app = __meteor_bootstrap__.app;
    app.use('/callback',function (req,res) {
      res.writeHead(404);
      res.end();
      return;
    });
  });
}

思想?

3 个答案:

答案 0 :(得分:8)

此解决方案的问题在于您的中间件放在堆栈的底部。因此,catch-all流星处理程序将始终在“/ callback”-handler之前运行。

解决这个问题的一个非常黑客的方法(直到流星发布其正确的路由支持)是将你的处理程序拼接在堆栈顶部:

__meteor_bootstrap__.app.stack.splice (0, 0, {
    route: '/hello',
    handle: function (req,res, next) {
        res.writeHead(200, {'Content-Type': 'text/plain'});
        res.end("hello world");
        return;
    }.future ()
});

答案 1 :(得分:6)

您可以使用Meteor Router智能套件实现此目的:

Meteor.Router.add({
  '/callback': 404
})

答案 2 :(得分:2)

有些答案导致路由在服务器上暂时不受限制而不是黑客。这是一个已知问题,听起来像路由是待办事项列表中的热门项目。