2012-03-20 32 views
11

Nie mogę się dowiedzieć, jak uzyskać mój serwer ekspresowy do uruchomienia prostej funkcji po uruchomieniu serwera. Gdzie jest odpowiednie miejsce do wywoływania funkcji uruchamianej przy starcie serwera i właściwej składni?Jak uruchomić funkcję po uruchomieniu serwera Express?

Mam funkcja w moich trasach, jak plik exports.myFunction = function() { code here};

Próbowałem trzymać go w bloku app.configure jako routes.myFunction. Próbowałem zmienić go na trasach po prostu myfunction() { code}, a następnie wywołanie go w bloku konfiguracyjnym jako routes.myfunction(), nie było też szczęścia. Funkcja musi pozostać w pliku zawierającym moje trasy, ponieważ zmienia tam niektóre zmienne globalne.

Wiem, że to trochę głupio prosta rzecz składniowa, ale nie mogę znaleźć żadnych podpowiedzi. Bardzo dziękuję za pomoc!

Odpowiedz

22

użyć tego zdarzenia:

app.on('listening', function() { 
    // server ready to accept connections here 
}); 

Szczerze app zwrócony przez express.createServer() jest po prostu http.Server, więc wszystko opisane w nodejs docs related to http.Server sensu dla wyraźnej i railwayjs.

+0

Awesome! To jest dokładnie to, czego potrzebowałem =) – kjb

+0

To nie działa dla mnie. Myślę, że jest to związane z faktem, że plik 'www' z generatora ma już wydarzenie' listening'? –

6

Utrzymałbym to w prostocie. W module, w którym dzwonisz pod numer app.listen(port), po prostu wywołaj funkcję uruchamiania tuż przed (lub po). Jeśli chcesz, aby ta funkcja znajdowała się w oddzielnym module pełnym innych tras, po prostu wyeksportuj ją, aby Twój główny moduł server.js mógł wywołać go podczas uruchamiania. Jeśli nadal nie jesteś z tego zadowolony, rozważ powiązanie detektora zdarzeń gdzieś w trybie express/connect, chociaż nie jestem pewien, czy emitowane jest jednoznaczne zdarzenie "startowe".

W server.js (lub cokolwiek moduł uruchomieniu wyraźnej serwer), to zrobić:

var myRoutes = require("./myroutes"); 
var app = express.createServer(); 
... 
app.listen(8080, "127.0.0.1", function() { 
    myRoutes.myFunction(); 
}); 

Można także powiązać z „słuchania” wydarzenie jak mówi @Anatoly. docs for the listening event are here.

+0

hmm, nadal nie ma szczęścia. Nie dostaję żadnego wskazania, że ​​funkcja jest faktycznie uruchamiana, ale nie ma również błędu. =/ – kjb

+0

Co masz na myśli mówiąc "wyeksportuj go, aby twój główny moduł server.js mógł go wywołać podczas uruchamiania"? Wybacz mi, jestem nowy z express/javascript – kjb

+0

Nie zadziałałoby to z powodu asynchronicznej natury metody 'listen'. – Anatoliy

Powiązane problemy