"mpromise(mongoose的默认承诺库)已被弃用"测试时出错

Iva*_*lic 13 mocha.js mongoose mongodb node.js

有一段时间我一直在收到这个错误,我今天决定修复它,但是经过一个小时试图解决它后,我可以找到解决方案.

当我测试我的mongoose用户模型时,会生成此错误/警告:

Mongoose: mpromise (mongoose's default promise library) is deprecated, plug in your own promise library instead: http://mongoosejs.com/docs/promises.html
Run Code Online (Sandbox Code Playgroud)

这是我的测试:

  1 var assert = require('chai').assert;
  2 var mongoose = require('mongoose');
  3 var clearDB = require('mocha-mongoose')(require('../../config/database').uri, { skip: ['workouts'] });
  4 var database = require('../../config/database').connect;
  5
  6 var User = require('../../app/models/user');
  7 var user = new User({});
  8
  9 var req_body = {
 10   username: "garyvee",
 11   email: "gary@vaynermedia.com",
 12   password: "secret"
 13 };
 14
 15 describe('User', function() {
 16   beforeEach(function(done) {
 17     user.username = "johnsmith";
 18     user.email = "john@gmail.com";
 19     user.password = "secret";
 20     done();
 21   });
 22
 23   it('can be saved', function() {
 24     return user.save(function(err: any) {
 25       assert.isNull(err);
 26     })
 27   });
 28 });
Run Code Online (Sandbox Code Playgroud)

我认为这与它有关,.save但我不知道如何解决它.有人可以帮助我并告诉我如何解决它,以便不显示错误/警告.

Joh*_*erz 31

你需要插入一个promise库(q,bluebird,es6 one ...)

mongoose.Promise = require('bluebird');
Run Code Online (Sandbox Code Playgroud)

  • 将上述内容与节点 6.9.1、mongoose 4.8.3 和 bluebird 3.4.7 一起使用时,我仍然收到此警告。 (2认同)

ole*_*ank 14

从节点4.x你可以使用ES6承诺:

const mongoose = require('mongoose');
mongoose.Promise = Promise;
Run Code Online (Sandbox Code Playgroud)