我正在尝试使用我的自定义方法在猫鼬的顶部开发一个类,所以我用我自己的类扩展了猫鼬但是当我调用创建一个新的汽车方法它可以工作但它的条带和错误,这里我让你看看我想做什么。
我收到了这个警告
(node:3341) DeprecationWarning: Mongoose: mpromise (mongoose's default promise library) is deprecated, plug in your own promise library instead: http://mongoosejs.com/docs/promises.html
之后
driver.createCar({
carName: 'jeep',
availableSeats: 4,
}, callback);
driver是Driver类的实例
const carSchema = new Schema({
carName: String,
availableSeats: Number,
createdOn: { type: Date, default: Date.now },
});
const driverSchema = new Schema({
email: String,
name: String,
city: String,
phoneNumber: String,
cars: [carSchema],
userId: {
type: Schema.Types.ObjectId,
required: true,
},
createdOn: { type: Date, default: Date.now },
});
const DriverModel = mongoose.model('Driver', driverSchema);
class Driver extends DriverModel {
getCurrentDate() {
return moment().format();
}
create(cb) {
// save driver
this.createdOn = this.getCurrentDate();
this.save(cb);
}
remove(cb) {
super.remove({
_id: this._id,
}, cb);
}
createCar(carData, cb) {
this.cars.push(carData);
this.save(cb);
}
getCars() {
return this.cars;
}
}
关于我做错什么的任何想法?
答案 0 :(得分:233)
在阅读完docs之后,以下是解决问题的方法: http://mongoosejs.com/docs/promises.html
doc中的示例是使用bluebird promise库,但我选择使用本机ES6承诺。
在我调用mongoose.connect
的文件中:
mongoose.Promise = global.Promise;
mongoose.connect('mongodb://10.7.0.3:27107/data/db');
[编辑:感谢@SylonZero在我的回答中提出了一个性能缺陷。由于这个答案被大大地看待,我觉得有责任进行编辑并鼓励使用bluebird
而不是原生承诺。请阅读下面的答案,了解更多有经验和有经验的细节。 ]
答案 1 :(得分:68)
虽然上面的答案是准确无误的,但如果你有一个真实的生产节点应用,你必须考虑性能的问题。
上面的解决方案将使用原生ES6承诺 - 比我在下面分享的基准测试中蓝鸟<强>慢4倍。这可能会极大地影响在Node中编写并使用MongoDB的API的性能。
我建议使用Bluebird:
// Assuming you store the library in a var called mongoose
var mongoose = require('mongoose');
// Just add bluebird to your package.json, and then the following line should work
mongoose.Promise = require('bluebird');
基准测试结果
平台:(在撰写本文时使用最新的节点)
| file | time(ms) | memory(MB) |
|-------------------------------------------|----------|------------|
| callbacks-baseline.js | 114 | 25.09 |
| callbacks-suguru03-neo-async-waterfall.js | 152 | 32.98 |
| promises-bluebird-generator.js | 208 | 29.89 |
| promises-bluebird.js | 223 | 45.47 |
| promises-cujojs-when.js | 320 | 58.11 |
| promises-then-promise.js | 327 | 64.51 |
| promises-tildeio-rsvp.js | 387 | 85.17 |
| promises-lvivski-davy.js | 396 | 81.18 |
| callbacks-caolan-async-waterfall.js | 527 | 97.45 |
| promises-dfilatov-vow.js | 593 | 148.30 |
| promises-calvinmetcalf-lie.js | 666 | 122.78 |
| generators-tj-co.js | 885 | 121.71 |
| promises-obvious-kew.js | 920 | 216.08 |
| promises-ecmascript6-native.js | 931 | 184.90 |
| promises-medikoo-deferred.js | 1412 | 158.38 |
| streamline-generators.js | 1695 | 175.84 |
| observables-Reactive-Extensions-RxJS.js | 1739 | 218.96 |
| streamline-callbacks.js | 2668 | 248.61 |
| promises-kriskowal-q.js | 9889 | 410.96 |
| observables-baconjs-bacon.js.js | 21636 | 799.09 |
| observables-pozadi-kefir.js | 51601 | 151.29 |
| observables-caolan-highland.js | 134113 | 387.07 |
答案 2 :(得分:2)
string consentGiven = ConsentGivenDate.Text;
DateTime date1 = Convert.ToDateTime(consentGiven);
cmd.Parameters.Add(new SqlParameter("@ConsentGivenDate", date1));
if ((ConsentGivenDate.Text == "dd/mm/yyyy"))
cmd.Parameters.Add("@ConsentGivenDate", SqlDbType.DateTime).Value = DBNull.Value;
else
cmd.Parameters.Add("@ConsentGivenDate", SqlDbType.DateTime).Value = ConsentGivenDate.Text;
如果你从一个mongoose实例中创建了一个模型,而该模型的承诺没有被重新定义 - 这个模型上的每个查询都会抛出警告。
答案 3 :(得分:1)
zmq_pollitem_t
在最新版本的mongoose中需要与promise的帮助有联系[这是链接] [1] [1]:http://mongoosejs.com/docs/promises.html
答案 4 :(得分:0)
只需将第二个参数作为对象添加到connect()方法中。
mongoose.connect('dbUrl', {
useMongoClient: true
});
请参阅:http://mongoosejs.com/docs/connections.html#use-mongo-client
答案 5 :(得分:0)
我认为您有答案,但我使用 global.promise 进行错误处理
// MongoDB connection
mongoose.Promise = global.Promise;
var promise = mongoose.connect('mongodb://localhost:27017/test_db', {
useMongoClient: true,
});
promise.then(function(db) {
console.log("Connected to database!!!");
}, function(err){
console.log("Error in connecting database " + err);
});
答案 6 :(得分:0)
如果你发现这样的错误:
(node:9600)DeprecationWarning:Mongoose:mpromise(mongoose的默认值) promise library)已弃用,请插入您自己的promise库 相反:http://mongoosejs.com/docs/promises.html
您还需要设置承诺库用于驱动程序的选项。
mongoose.Promise = global.Promise
mongoose.connect(uri, { useMongoClient: true, options: { promiseLibrary: mongoose.Promise }})
答案 7 :(得分:0)
var mongoose = require('mongoose');
mongoose.Promise = global.Promise;
db = mongoose.connect(env.DATABASE_URI, function(){
//
})
这项工作对我而言。