2012-04-12 6 views
7

Ich baue meine erste Meteor-App und muss in der Lage sein, einen neuen Routen-Handler zu erstellen, um einen OAuth-Callback zu bearbeiten. Ich habe durch server.js geschaut und festgestellt, dass der Kontext connect.app unter meteor_bootstrap verfügbar ist. Das scheint nicht zu funktionieren:Kann ich einen anderen Routen-Handler über __meteor_bootstrap__.app mounten?

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

Gedanken?

Antwort

8

Das Problem mit dieser Lösung ist, dass Ihre Middleware an den unteren Rand des Stapels gelegt wird. Daher läuft der Catch-all-Meteor-Handler immer vor Ihrem "/ Callback" -Handler.

Ein sehr hacky Weg, dies zu umgehen (bis der Meteor ihre richtige Routing-Unterstützung veröffentlicht) ist in Ihrem Handler att oben auf den Stapel spleißen:

__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

Danke, funktioniert wie ein Charme. –

+4

Dies sollte nicht nach der folgenden Änderung notwendig sein: https://github.com/meteor/meteor/commit/a2d5bfa6dbbecff94877142a57bb212aa7f2a590 – avital

+0

+1 für die Kenntnis dies und auch für die Meteor Code-Änderung. Kannst du erklären, wie das hilft? –

2

Einige der Antworten führen dazu, dass das Routing im Moment ein No-Go auf dem Server ist, ohne hacky zu sein. Es ist ein bekanntes Problem, und klingt wie Routing ist ein heißes Element auf der ToDo-Liste.

6

Sie dies mit dem Meteor Router Smart erreichen können Paket:

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

Dies ist derzeit die beste Antwort. – wizonesolutions