2012-04-12 27 views
7

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

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

想法?

回答

8

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

一个非常哈克的方式来解决这个问题(直到流星释放出其应有的路由支持)是在你的处理器拼接ATT堆栈的顶部:

__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() 
}); 
+0

谢谢,作品像一个魅力。 – 2012-06-12 20:04:28

+4

这应该不是必要的后发生以下变化:https://github.com/meteor/meteor/commit/a2d5bfa6dbbecff94877142a57bb212aa7f2a590 – avital 2012-08-20 07:43:53

+0

+1注意到这一点,也为流星代码更改。你能澄清一下吗? – 2013-06-26 03:14:10

2

一些答案导致路由在服务器上不受干扰,而现在不受干扰。这是一个已知的问题,听起来像路由是待办事项列表上的热门项目。

6

您可以用Meteor Router智能实现这一目标包:

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

这是目前最好的答案。 – wizonesolutions 2013-05-28 14:23:32

相关问题