Pregunta

De los que no puedo por la vida de mí conseguir la mangosta de trabajo en mi expreso de la aplicación.He instalado la mangosta, y también mongodb a través de MECANISMO nacional de prevención (la mangosta documentación no el estado si mongodb fue requerido por separado o cómo poner en marcha).

Aquí es el código que estoy usando.

    var mongoose = require('mongoose');
    mongoose.connect('mongodb://127.0.0.1/my_database');

    var Schema = mongoose.Schema, ObjectId = Schema.ObjectId;

    var Comments = new Schema({
        title     : String
      , body      : String
      , date      : Date
    });

    var BlogPost = new Schema({
        author    : ObjectId
      , title     : String
      , body      : String
      , date      : Date
      , comments  : [Comments]
      , meta      : {
            votes : Number
          , favs  : Number
        }
    });

    var BlogPost = mongoose.model('BlogPost', BlogPost);
    var post = new BlogPost();
    post.title='blahblah';
    // create a comment
    post.comments.push({ title: 'My comment' });

    post.save(function (err) {
      if(err){
          throw err;
          console.log(err);
      }else{
          console.log('saved!');
      }
    });

Alguien tiene alguna idea de lo que estoy haciendo mal?Yo no entiendo si tengo que de alguna manera empezar a mongodb por separado o no (parece que la mangosta.función de conexión se inicia el servidor de mongodb derecho?)

Pero ya, no sucede nada cuando inicio mi app (y debe mostrar el error o guardado!a mi consola cuando me guarde la prueba post a la derecha?

De todos modos cualquier ayuda sería muy apreciada!

Gracias

¿Fue útil?

Solución

MongoDB es un servicio y por lo que ya debe estar en ejecución para nodejs para acceder a ella.

La razón de que usted no está viendo ningún resultado es debido a que el programa termina antes de que tu post se completa, o en este caso, debido a que no puede llegar a MongoDB.

EDITAR

Si usted todavía está curioso por qué no ves ninguna salida cuando MongoDB no estaba corriendo, dejar de MongoDB, modificar su aplicación incluyen:

// exit program in one minute with an error
// cancelled if we can successfully talk to MongoDB
var sentinel = setTimeout(function(){
    throw "failed to connect to MongoDB after one minute!";
}, 60*1000); // 60 seconds

post.save(function (err) {

  clearTimeout(sentinel); // cancel the timeout sentinel

  if(err){
      throw err;
      console.log(err); // won't occur since the throw will end the program
  }else{
      console.log('saved!');
  }
});

process.stdin.resume();  // read from stdin to keep program running

y ejecutarlo de nuevo.

Es fundamental darse cuenta de que nodejs no es como la mayoría de los entornos de programación en que se ejecuta el programa en un bucle de eventos que sólo se ejecuta siempre que tiene algo que ver.Si no hay nada que hacer, nodejs va a salir.

Y desde su puesto.guardar() inicia una nueva llamada asincrónica a MongoDB y devuelve inmediatamente, la aplicación va a salir inmediatamente ya que no hay nada más por hacer.(Debajo de las mantas, post.save (), simplemente agrega un nuevo controlador de eventos para el bucle de eventos que vigila para que se realice la llamada.)

Para asegurar que su programa no salir inmediatamente, añadimos process.stdin.resume() que instruye el bucle de eventos para comprobar el nuevo input (entrada estándar) en cada paso, haciendo que su programa se ejecuta siempre.

Nodejs basado en servidores de red se basan en el mismo mecanismo para ejecutar de forma continua, para ver la entrada de un socket de red en lugar de la entrada estándar.

No puedo hacer suficiente hincapié en lo fundamental que el evento de bucle concepto de programación en nodejs.Diría que el 75% o más de los problemas que la gente informe de llegar nodejs para hacer lo que necesita puede ser atribuido a no entender el bucle de eventos y cómo afecta a la nodejs modelo de programación!

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top