복붙노트

[MONGODB] Mongoose.js의 instance.save () 콜백 발사하지

MONGODB

Mongoose.js의 instance.save () 콜백 발사하지

var mongo = require('mongoose');
var connection = mongo.createConnection('mongodb://127.0.0.1/test');

connection.on("error", function(errorObject){
  console.log(errorObject); 
  console.log('ONERROR');
});

var Schema = mongo.Schema;
var BookSchema = new Schema({ title : {type : String, index : {unique : true}}});
var BookModel = mongo.model('abook', BookSchema);
var b = new BookModel({title : 'aaaaaa'});

b.save( function(e){ 
  if(e){
    console.log('error')
  }else{
    console.log('no error')
}});

어느 것도 '오류'또는 '오류 없음'는 단자에 출력되지 않는다. 더 connection.on '오류'무엇 하나 화재에 보이지 않는다. 나는 MongoDB를가 실행되고 있는지 확인했다.

해결법

  1. ==============================

    1.이 전역 몽구스 객체 모델을 추가하지만 모델의 일부가 아닌 것을 별도의 연결 mongo.createConnection ()를 개방 한 경우입니다. 모델이 아무런 관련이 없기 때문에 그것은 DB에 저장할 수 없습니다.

    이 전역 몽구스 객체 모델을 추가하지만 모델의 일부가 아닌 것을 별도의 연결 mongo.createConnection ()를 개방 한 경우입니다. 모델이 아무런 관련이 없기 때문에 그것은 DB에 저장할 수 없습니다.

    이 글로벌 몽구스 연결 몽고 연결하여 하나 해결된다 :

    var connection = mongo.createConnection('mongodb://127.0.0.1/test');
    // becomes
    var connection = mongo.connect('mongodb://127.0.0.1/test');
    

    또는하여 별도의 연결에 모델을 추가 :

    var BookModel = mongo.model('abook', BookSchema);
    // becomes
    var BookModel = connection.model('abook', BookSchema);
    
  2. ==============================

    2.게시 된 대답은 문제가 해결되지 않습니다. 그 해결책은 나를 위해 하나없는 불행하게도, 난 그냥 내 데이터베이스를 업그레이드 할 수 없습니다. 그러나 여기에서 나는이 문제에 대한 해결책을 발견 https://github.com/Automattic/mongoose/issues/4064

    게시 된 대답은 문제가 해결되지 않습니다. 그 해결책은 나를 위해 하나없는 불행하게도, 난 그냥 내 데이터베이스를 업그레이드 할 수 없습니다. 그러나 여기에서 나는이 문제에 대한 해결책을 발견 https://github.com/Automattic/mongoose/issues/4064

    그냥 사용하는 대신 같이 .save의 저장 $ __. :

    var b = new BookModel({title : 'aaaaaa'});
    
    b.$__save({}, function(e){ 
      if(e){
        console.log('error')
        // callback will show if e exists
      }else{
        console.log('no error')
        // callback will show 'no error'
    }});
    
  3. ==============================

    3.나는 아직 거기 해요 있지만 정말 아론의 대답 등을들 수 있으며, 덕분에 그에게 나는 ... 문제를 해결로가는 길에 지금이다! 여기 내 특정 문제는 :

    나는 아직 거기 해요 있지만 정말 아론의 대답 등을들 수 있으며, 덕분에 그에게 나는 ... 문제를 해결로가는 길에 지금이다! 여기 내 특정 문제는 :

    내 스키마와 별도의 파일에 정의 된 모델을 갖고 싶어, 그래서 프로젝트에 프로젝트에서 다시 사용할 수 있습니다. 다음과 같이 내가 파일을 이름 W8DBItem.js을 예로 그래서 :

    var mongoose = require('mongoose');
    var itemSchema = new mongoose.Schema({ name: {type: String, required: true}});
    module.exports = mongoose.model('W8DBItem', itemSchema);
    

    내 프로그램 파일에서 나는이 이렇게 :

    var mongoose = require('mongoose');
    var W8DBItem = require('../w8/W8DBItem.js'); 
    var dbURL ='mongodb://localhost:27017/default';
    var mongoOptions = { useNewUrlParser: true, bufferCommands: false }
    mongoose.connect(dbURL, mongoOptions);
    
    var db = mongoose.connection;
    
    // DEAL WITH CONNECTION ERROR
    db.on('error', console.error.bind(console, 'connection error:'));
    
    // PREP DATA
    var aWeight = { name: "My Test Name" };
    var newWeightItem = W8DBItem(aWeight);
    
    // CONNECTION ESTABLISHED
    db.once('open', function() {
        console.log("Here 1")
    
        // TRY TO SAVE
       newWeightItem.save(function (err, newWeightItem) {
        if (err) { 
            console.log("Here 2");
            console.log(err);
        }
        else {
            console.log("Here 3");
            console.log(newWeightItem);
        }
      });
    });
    

    나는이 프로그램을 실행하면 나는 "여기 1"하지만 결코 "여기 2"또는 "여기 3"콘솔에서 얻을.

    아론의 포스트에서 나는 W8DBItem 객체가 어떤 연결을 연관 (오픈) 것을 얻을 수 없지만, 나는 확실히 일을 해결 대해 이동하는 방법을 모르겠습니다. 나는 W8DBItem.js 파일의 DB에 연결할 수 있습니다,하지만 난 정말 개체로 서버 정보를 하드 코딩 좋아하지 않는다 - 나는 이러한 개체가 다른 파일을 사용하고 싶지, 그리고 아마도 다른 서버와.

    아이디어와 제안이 많이 감사합니다!

    [EDIT : 해결책 FOUND!]

    대신 내 오브젝트 파일에서 내 mongoose.model 수출, 나는 단지 스키마를 수출하고있다 :

    var mongoose = require('mongoose');
    var itemSchema = new mongoose.Schema({name: {type: String, required: true}});
    module.exports = itemSchema;
    

    내 프로그램 파일에서 나는 다음과 같이하십시오 :

    var itemSchema = require('../w8/W8DBItemSchema.js'); 
    ...
    
    var W8DBItem = db.model('W8DBItem', itemSchema);
    var newWeightItem = W8DBItem(aWeight);
    ...
    

    매력처럼 작동합니다. 나는이 사람을 도움이되기를 바랍니다!

  4. from https://stackoverflow.com/questions/10156623/mongoose-js-instance-save-callback-not-firing by cc-by-sa and MIT license