猫鼬承诺错误
Posted
技术标签:
【中文标题】猫鼬承诺错误【英文标题】:Mongoose Promise error 【发布时间】:2017-06-15 16:09:05 【问题描述】:这是添加原生promise后保存时仍然抛出的错误。
(node:5604) DeprecationWarning: Mongoose: mpromise(mongoose 的默认承诺库)已弃用,请插入您自己的承诺库:http://mongoosejs.com/docs/promises.html
mongoose.Promise = global.Promise;
mongoose.connect('mongodb://127.0.0.1/optimusCP')
.then(function ()
console.log('Connected to MONGOD !!');
).catch(function (err)
console.log('Failed to establish connection with MONGOD !!');
console.log(err.message);
);
我已尝试过 bluebird 和 q,但仍未找到解决此问题的方法。 以下是我保存时的代码,出现以下弃用警告..
var user = new User();
user.email = req.body.email;
user.password = hash;
user.save()
.then(function (user)
console.log(user);
)
.catch(function (err)
console.log(err);
);
这个错误发生在 4.8.1 的新版本 mongoose 上,但在 4.7.6 mongoose 版本上工作正常。
【问题讨论】:
你读过上一节关于MongoDB 驱动程序的承诺 来自文档?如果是的话.. 只是你没有展示那部分代码 我已经更新了我的代码 【参考方案1】:将 Mongoose 从 4.8.1 升级到 4.9.1 解决了我的问题。
【讨论】:
【参考方案2】:尽管在mongoose.connect(...)
之前使用了mongoose.Promise = global.Promise;
,但我收到了同样的警告。
我发现,我在一个文件中初始化了 mongoose 连接:
import mongoose from 'mongoose';
...
// Connect to MongoDB
mongoose.Promise = global.Promise;
mongoose.connect(mongoUri, mongoOptions);
mongoose.connection.on('error', (err) =>
console.error(`MongoDB connection error: $err`);
process.exit(1);
);
但我也在另一个文件中导入了mongoose
(其中描述了猫鼬方案),所以我也在第二个文件中添加了mongoose.Promise = global.Promise;
,结果警告消失了。
import mongoose, Schema from 'mongoose';
mongoose.Promise = global.Promise;
const UserSchema = new Schema( ... );
可能你也有同样的情况。
【讨论】:
兄弟你救了我的命(开个玩笑)正确答案兄弟(y) 我有同样的问题,但确实喜欢你的 sn-p 但不工作。你能有其他解决方案吗?【参考方案3】:我已经使用 bluebird 将 promise 与猫鼬模型函数节点 v6.9.4 一起使用:
mongoose.Promise = require('bluebird');
【讨论】:
我已经明确提到我尝试过同时使用bluebird和q,但仍然是同样的问题。【参考方案4】:我已经成功摆脱了这个消息
mongoose.Promise = Promise;
【讨论】:
以上是关于猫鼬承诺错误的主要内容,如果未能解决你的问题,请参考以下文章
测试时出现“mpromise(猫鼬的默认承诺库)已弃用”错误[重复]