Mongoose model.save()等待挂起?

时间:2017-12-07 22:47:22

标签: node.js mongoose

我使用mongoose来处理我的模式,使用MongoDB,但是当尝试将新条目保存到集合时,save()方法似乎被卡住,then()方法或{{1}承诺的方法似乎被调用。

有没有人有任何想法?

catch()

环境:nodejs 8.9.0,节点模块:Mongoose 4.13.6,mongodb 2.2.33

1 个答案:

答案 0 :(得分:4)

稍微进行一些实验,看起来我需要确保模型与连接相关联,这样:

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: 'someuser@somedomain.com',
        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);
});

或者,我们应该使用connect()方法,该方法将与通过mongoose.model关联的模型一起使用。

createConnection()可用于创建多个连接,因此使用全局&#39;从我所知道的,不支持模型。

如果save()没有简单地阻止,说这一切就好了。

注意:在研究我的答案的改进时,我遇到了以下内容:Queries hang when using mongoose.createConnection() vs mongoose.connect()