2012-08-03 14 views
18

Mam zamiar użyć Meteoru do aplikacji rejestrującej w czasie rzeczywistym dla różnych Moje wymaganie jest całkiem proste, Przekażę komunikat Log jako żądanie Parametr (POST lub GET) z różnych aplikacji i Meteor wymaga po prostu aktualizacji kolekcji. Potrzebuję uzyskać dostęp do parametrów żądania w kodzie serwera Meteor i zaktualizować kolekcję Mongo za pomocą przychodzącego logMessage. Nie mogę aktualizować Mongo Collection bezpośrednio z istniejących aplikacji, więc nie proszę o odpowiedzi sugerujące to samo. Chcę wiedzieć, jak mogę to zrobić z frameworka Meteor, a nie robiąc tego, dodając kolejne pakiety.Jak uzyskać dostęp do parametrów zlecenia w systemie Meteor?

+0

Nie jestem pewien, czy to jest możliwe, aby uzyskać dostęp do leżących u podstaw wystąpienia node.js. Ale jeśli możesz jakoś to złapać, szybkie 'app.post ('/', function (request, response) {});' zrobiłoby lewę. Po prostu pomysł, naprawdę nie mam pojęcia, czy to jest możliwe. –

Odpowiedz

0

W obecnej sytuacji nie ma obsługi routingu po stronie serwera ani określonych działań po stronie serwera po trafieniu adresów URL. Więc nie jest łatwo robić to, co chcesz. Oto parę sugestii.

  1. Prawdopodobnie można osiągnąć to, co chcesz przez pożyczanie technik, które są wykorzystywane przez pakiet oauth2 na gałęzi logowania: https://github.com/meteor/meteor/blob/auth/packages/accounts-oauth2-helper/oauth2_server.js#L100-109

    Jednak nie jest to naprawdę obsługiwanych więc nie jestem pewien, że to dobry pomysł.

  2. Twoje inne aplikacje mogą zaktualizować kolekcje za pomocą DDP. Jest to prawdopodobnie łatwiejsze niż się wydaje.

  3. Można użyć aplikacji pośredniej, która akceptuje żądania POST/GET i rozmawia z serwerem meteorologicznym przy użyciu DDP. Jest to prawdopodobnie najłatwiejsze technicznie do zrobienia.

+0

W rzeczywistości, Meteor Router _nie obsługuje tras po stronie serwera, oprócz bardziej popularnych po stronie klienta. Zobacz dokumentację na jego stronie github: https://github.com/tmeasday/meteor-router –

+1

Haha, masz rację oczywiście, ale kiedy napisałem tę odpowiedź, nie dodałem jeszcze tej funkcji do routera;) –

9

znalazłem obejście dodać router do wniosku Meteor do obsługi żądań niestandardowych.

Używa oprogramowania pośredniego routera, które jest dostarczane z meteorytem. Bez dodatkowych zależności!

Umieść ten przed/poza Meteor.startup na serwerze. (Coffeescript)

SomeCollection = new Collection("...") 
fibers = __meteor_bootstrap__.require("fibers") 
connect = __meteor_bootstrap__.require('connect') 
app = __meteor_bootstrap__.app 

router = connect.middleware.router (route) -> 
    route.get '/foo', (req, res) -> 
    Fiber() -> 
     SomeCollection.insert(...) 
    .run() 
    res.writeHead(200) 
    res.end() 
app.use(router) 
+0

Powinno to zostać udokumentowane na docs.meteor.com (przynajmniej do czasu, gdy pojawi się bardziej oficjalne rozwiązanie :) @Geoff –

+0

dodać następujące informacje, jeśli chcesz użyć automatycznego zapytania i analizy treści: app.use (connect.query()) .use (connect.bodyParser()) –

+1

Uwaga: od 0.6.0 to nie zadziała - chociaż spójrz na NPM.require ("..."); – emgee

12

EDIT: Updated używać Iron Router, następca Meteor routera.

Install Iron Router i określenie trasy po stronie serwera:

Router.map(function() { 
    this.route('foo', { 
    where: 'server', 
    action: function() { 
     doSomethingWithParams(this.request.query); 
    } 
    }); 
}); 

Więc do wniosku jak http://yoursite.com/foo?q=somequery&src=somesource, zmienna this.request.query w funkcji powyżej byłoby { q: 'somequery', src: 'somesource' } i dlatego można zażądać poszczególnych parametrów poprzez this.request.query.q i this.request.query.src i tym podobne. Przetestowałem tylko żądania GET, ale POST i inne typy zgłoszeń powinny działać identycznie; działa tak jak Meteor 0.7.0.1. Kod ten należy umieścić wewnątrz bloku Meteor.isServer lub w pliku w folderze /server w projekcie.

Original post:

Zastosowanie Meteorite zainstalować Meteor Router i określenie trasy po stronie serwera:

Meteor.Router.add('/foo', function() { 
    doSomethingWithParams(this.request.query); 
}); 

Więc do wniosku jak http://yoursite.com/foo?q=somequery&src=somesource, zmienna this.request.query w funkcji powyżej będzie { q: 'somequery', src: 'somesource' } i dlatego możesz poprosić o indywidualne parametry poprzez this.request.query.q nd this.request.query.src i tym podobne. Przetestowałem tylko żądania GET, ale POST i inne typy zgłoszeń powinny działać identycznie; działa tak jak Meteor 0.6.2.1. Kod ten należy umieścić wewnątrz bloku Meteor.isServer lub w pliku w folderze /server w projekcie.

wiem, że pytający nie chce dodać pakietów, ale myślę, że za pomocą Meteorite zainstalować Meteor Router wydaje mi się bardziej przyszłościowe drogę do wdrożenia tego w stosunku do dostępu do wewnętrznych nielegalnych przedmiotów Meteor jak __meteor_bootstrap__. Kiedy pakiet API zostanie sfinalizowany w przyszłej wersji Meteor, proces instalacji Meteor Routera stanie się łatwiejszy (nie będzie potrzeby korzystania z Meteorytu), ale nic innego nie ulegnie zmianie, a Twój kod prawdopodobnie nadal będzie działał bez konieczności modyfikacji.

+0

Od Iron Routera = = 1.0, 'this.request.query' został wycofany z' this.params.query' – mrkre

+0

@ Geoffrey-Booth Próbowałem przesłać dane z tarczy GSM i ta linia kodu ma POBIERZ Chciałbym po prostu zmienić go na POST, chociaż jest potrzeba "Meteor.call (" POST "lub czy Iron Router już sobie z tym poradził? 'Char request [] =" GET /test-get-post.php ? a = 1 & b = 2 HTTP/1.1 \ r \ nHost: test.libelium.com \ r \ nDługość: 0 \ r \ n \ r \ n "; ' – mjwrazor

2

Zastosowanie IronRouter, to takie proste:

var path = IronLocation.path(); 
Powiązane problemy