【发布时间】:2018-05-22 03:40:43
【问题描述】:
我正在使用 mongoose 通过 MongoDB 处理我的模式,但是当尝试将新条目保存到集合时,save() 方法似乎被卡住了,then() 方法或 catch() 方法promise 似乎被调用了。
有人有什么想法吗?
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: '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);
});
环境:nodejs 8.9.0,节点模块:Mongoose 4.13.6,mongodb 2.2.33
【问题讨论】:
-
有一个回调来保存方法和控制台错误参数来知道什么是错的。另外
return prom基本上是在终止你的函数,所以它明显的剩余代码没有执行 -
我认为 pending 的事情没有任何问题。毕竟是异步代码,console.log 在保存完成之前被调用。您可以将
createConnection更改为connect以使其保存。