2012-03-20 31 views
11

Parece que no puedo entender cómo hacer que mi servidor express ejecute una función simple cuando el servidor se inicia. ¿Dónde está el lugar apropiado para llamar a una función para que se ejecute al inicio del servidor y la sintaxis adecuada?¿Cómo ejecutar una función cuando se inicia un servidor Express?

tengo la función en mis rutas archivo como exports.myFunction = function() { code here};

He intentado pegándolo en el bloque app.configure como routes.myFunction. He intentado cambiarlo en las rutas para que solo sea myfunction() { code}, y luego llamarlo en el bloque de configuración como routes.myfunction(), sin suerte tampoco. La función debe permanecer en el archivo que contiene mis rutas, ya que altera algunas variables globales allí.

Sé que es algo de sintaxis estúpidamente simple, pero parece que no puedo encontrar ninguna pista here o en google. Muchas gracias por cualquier ayuda!

Respuesta

22

Usar este evento:

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

para ser honesto app devuelto por express.createServer() es sólo http.Server, por lo que todo lo descrito en nodejs docs related to http.Server tiene sentido para expresar y railwayjs.

+0

¡Impresionante! Esto es exactamente lo que necesitaba =) – kjb

+0

No funciona para mí. Creo que está relacionado con el hecho de que el archivo 'www' del generador ya tiene un evento de 'escucha'. –

6

Lo mantendría simple. En el módulo donde llama al app.listen(port), simplemente llame a su función de inicio justo antes (o después) de eso. Si necesita que la función resida en un módulo separado lleno de otras rutas, solo exporte para que su módulo principal server.js pueda invocarlo al inicio. Si todavía no está satisfecho con eso, considere la posibilidad de vincular un oyente de eventos en algún lugar de expresar/conectar, aunque no estoy seguro de que se emita un evento de "inicio" explícito.

En server.js (o lo que sea módulo se inicia el servidor expreso), hacer esto:

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

También puede unirse a la "escucha" evento como dice @Anatoly. El docs for the listening event are here.

+0

hmm, todavía no hubo suerte. No recibo ninguna indicación de que la función realmente se esté ejecutando, pero tampoco error. =/ – kjb

+0

¿Qué quiere decir con "export it para que su módulo server.js principal pueda invocarlo al inicio"? Perdóname porque soy nuevo con express/javascript – kjb

+0

No funcionaría debido a la naturaleza asincrónica del método 'listen'. – Anatoliy

Cuestiones relacionadas