2017-12-07 10 views
0

MongoDBを使用してMongoDBを処理していますが、新しいエントリをコレクションに保存しようとすると、save()メソッドが停止しているように見えて、then()メソッドまたは約束のcatch()メソッドは呼び出されません。Mongoose model.save()が保留になっていますか?

誰にもアイデアはありますか?

const mongoose = require('mongoose'); 
const Schema = mongoose.Schema; 
// const Promise = require('bluebird'); 

const config = require('./config'); 

const UserSchema = new Schema({ 
    email: { type: String, required: true, index: { unique: true } }, 
    name: { type: String, required: false }, 
    password: { type: String, required: true } 
}); 

const User = mongoose.model('User', UserSchema); 

console.log('config.database.url', config.database.url); 

mongoose.Promise = global.Promise; 
return mongoose.createConnection(config.database.url, { 
    useMongoClient: true 
}) 
.then((connection) => { 
    const user = new User({ 
     email: '[email protected]', 
     password: 'xxxxx' 
    }); 

    const prom = user.save(); 

    // Displays: 'promise: Promise { <pending> }' 
    console.log('promise:', prom); 

    return prom 
    .then((result) => { 
     // Don't see this output 
     console.log('result:', result); 
    }) 
    .catch((error) => { 
     // Don't see this output either 
     console.log('error:', error); 
    }); 
}) 
.catch((error) => { 
    console.log(error); 
}); 

環境:8.9.0をnodejs、ノードモジュール:マングース4.13.6、MongoDBの2.2.33

+0

はいただきました!間違っている知っている方法と、コンソールエラーパラメータを保存するためのコールバックを持っています。また、 'return prom'は基本的にあなたの関数を終了しているので、明白な残りのコードは実行されません。 – wrangler

+0

*保留中のものに何も間違いはありません。結局のところ非同期コードなので、保存が完了する前にconsole.logが呼び出されます。 'createConnection'を' connect'で変更して保存することができます。 – MikaS

答えて

1

もう少し実験と、私がモデルは、接続に関連付けされていることを確認する必要があると思われます、よう:

const mongoose = require('mongoose'); 
const Schema = mongoose.Schema; 
// const Promise = require('bluebird'); 

const config = require('./config'); 

const UserSchema = new Schema({ 
    email: { type: String, required: true, index: { unique: true } }, 
    name: { type: String, required: false }, 
    password: { type: String, required: true } 
}); 

let User; 

console.log('config.database.url', config.database.url); 

mongoose.Promise = global.Promise; 

return mongoose.createConnection(config.database.url, { 
    useMongoClient: true 
}) 
.then((connection) => { 
    // associate model with connection 
    User = connection.model('User', UserSchema); 

    const user = new User({ 
     email: '[email protected]', 
     password: 'xxxxx' 
    }); 

    const prom = user.save(); 

    // Displays: 'promise: Promise { <pending> }' 
    console.log('promise:', prom); 

    return prom 
    .then((result) => { 
     // Don't see this output 
     console.log('result:', result); 
    }) 
    .catch((error) => { 
     // Don't see this output either 
     console.log('error:', error); 
    }); 
}) 
.catch((error) => { 
    console.log(error); 
}); 

はまた、我々はmongoose.modelを経由して関連するモデルで動作しますconnect()メソッドを使用する必要があります。

createConnection()の場合、複数の接続を作成するために使用できますので、「グローバル」モデルを使用することはサポートされていません。

save()が単純にブロックしていないと、これがうまくいくと思います。

注:私の答えに改善の研究では、私は次のように出くわした:Queries hang when using mongoose.createConnection() vs mongoose.connect()

関連する問題