2012-08-11 11 views
6

estoy usando Mangosta 3 y la manera más obvia para conectarse a la base de datos estáConexión/modelos de mangosta: ¿Necesita funcionar siempre en abierto?

conn = mongoose.createConnection(...) 
conn.on("open", ...) 

pregunta es, ¿necesito para definir todos mis modelos en la devolución de llamada abierta? Si esto es así, voy a tener que crear un initMongoose.coffee que se parece a

# initMongoose.coffee 

mongoose = require "mongoose" 
module.exports = mongoose.createConnection ... 

# modelExample.coffee 

conn = require "./initDatabase" 
conn.on "open", -> 
    ... define model? 
    modeule.exports = model # I think this does not work? 

Creo que he leído en alguna parte en documentos de nodos que los módulos no se pueden definir en una devolución de llamada de esa manera?


Ya que sólo estoy usando 1 de conexión, creo que puedo usar

mongoose.connect ... 

Qué duerma acepta ninguna devoluciones de llamada, así que supongo es sincrónico? ¿Puedo definir todos mis modelos y por lo tanto consultas inmediatamente después de connect()? Funciona en este momento, pero podría ser porque es lo suficientemente rápido.

+0

Gracias por hacer la pregunta. Veo todo tipo de ejemplos sin ponerlo en la devolución de llamada y ¡estaba desconcertado! También me preguntaba cómo estructuraría el programa si tengo que ponerlo en la devolución de llamada. – huggie

Respuesta

16

Mongoose almacena los comandos hasta que se termina de conectar, por lo que puede tratarlo como si fuera síncrono y definir sus modelos y comenzar a usar la biblioteca cuando lo desee; solo una vez que quiera comenzar a insertar o recuperar datos, debe hacer la conexión.

+0

Erm su segunda parte parece estar en contradicción con la 1ra. Entonces, puedo definir modelos justo después de conectar pero ¿puedo hacer lo mismo con los insertos? –

+0

Sí; el punto es que, mientras que la conexión es asíncrona, no es necesario tratarla así, ya que Mongoose detectará que no ha terminado de conectarse y almacenar en el buffer las inserciones hasta que haya terminado. –

+0

@MichelleTilley fuente? – CodyBugstein

Cuestiones relacionadas