Saya mencoba mengembangkan kelas di atas luwak dengan metode khusus saya, jadi saya memperluas luwak dengan kelas saya sendiri tetapi ketika saya meminta untuk membuat metode mobil baru itu berfungsi tetapi strip dan kesalahannya, di sini saya biarkan Anda lihat apa yang saya coba lakukan.
Saya mendapatkan peringatan ini
(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
setelah saya lakukan
driver.createCar({
carName: 'jeep',
availableSeats: 4,
}, callback);
driver adalah turunan dari kelas 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;
}
}
ada pemikiran tentang apa yang saya lakukan salah?
mongoose.Promise = global.Promise
dan Anda tidak akan mendapatkan peringatan itu lagi." github.com/Automattic/mongoose/issues/…Jawaban:
Inilah yang berhasil bagi saya untuk menyelesaikan masalah, setelah membaca dokumen: http://mongoosejs.com/docs/promises.html
Contoh di dokumen menggunakan pustaka janji bluebird tetapi saya memilih untuk menggunakan janji ES6 asli.
Di file tempat saya menelepon
mongoose.connect
:mongoose.Promise = global.Promise; mongoose.connect('mongodb://10.7.0.3:27107/data/db');
[EDIT: Terima kasih kepada @SylonZero karena mengemukakan cacat kinerja dalam jawaban saya. Karena jawaban ini sangat dilihat, saya merasa berkewajiban untuk melakukan pengeditan ini dan mendorong penggunaan
bluebird
alih-alih janji asli. Silakan baca jawaban di bawah ini untuk detail yang lebih berpendidikan dan berpengalaman. ]sumber
Meskipun jawaban di atas akurat dan berfungsi, Anda harus memperhitungkan masalah Kinerja jika Anda memiliki aplikasi Node produksi yang nyata.
Solusi di atas akan menggunakan promise ES6 asli - yang 4X lebih lambat dari bluebird dalam tolok ukur yang saya bagikan di bawah. Ini secara dramatis dapat memengaruhi kinerja API yang ditulis dalam Node dan menggunakan MongoDB.
Saya merekomendasikan menggunakan 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');
Hasil Tolok Ukur
Platform: (menggunakan Node terbaru pada saat penulisan)
| 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 |
sumber
apakah kamu mencoba ini? Sebagai contoh :
const mongoose = require('mongoose') mongoose.Promise = global.Promise // <-- const Schema = mongoose.Schema const UserSchema = new Schema({ name: String, }) const User = mongoose.model('user', UserSchema) module.exports = User
jika Anda membuat model dari instance luwak yang janji tidak didefinisikan ulang - setiap kueri pada model ini akan memberikan peringatan.
sumber
Saya pikir Anda punya jawaban tetapi saya menggunakan global.promise dengan penanganan kesalahan
// 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); });
sumber
var mydb; var uri = 'mongodb://localhost/user1'; var promise = mongooose.connect(uri,{ useMongoClient: true, }); promise.openUri(uri,function(errr,db){ if(errr){ throw errr; }else{ console.log("Connection Successfull"); mydb = db; } });
Seseorang harus memiliki koneksi dengan bantuan janji di versi terbaru luwak [ini adalah tautannya] [1] [1]: http://mongoosejs.com/docs/promises.html
sumber
Cukup tambahkan parameter kedua sebagai objek ke metode connect ().
mongoose.connect('dbUrl', { useMongoClient: true });
Lihat: http://mongoosejs.com/docs/connections.html#use-mongo-client
sumber
Luwak 4.8.6
Jika Anda menemukan kesalahan seperti ini:
Anda juga perlu menyetel opsi yang menjanjikan library yang akan digunakan untuk driver.
mongoose.Promise = global.Promise mongoose.connect(uri, { useMongoClient: true, options: { promiseLibrary: mongoose.Promise }})
sumber
var mongoose = require('mongoose'); mongoose.Promise = global.Promise; db = mongoose.connect(env.DATABASE_URI, function(){ // })
ini bekerja untuk saya.
sumber