Estou tentando desenvolver uma classe no topo do mangusto com meus métodos personalizados, então estendi o mangusto com minha própria classe, mas quando invoco para criar um novo método de carro, ele funciona, mas é despojado e com erro, aqui deixo você veja o que estou tentando fazer.
Estou recebendo este aviso
(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
depois que eu faço
driver.createCar({
carName: 'jeep',
availableSeats: 4,
}, callback);
driver é uma instância da classe 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;
}
}
alguma ideia sobre o que estou fazendo de errado?
mongoose.Promise = global.Promise
e você não receberá mais esse aviso." github.com/Automattic/mongoose/issues/…Respostas:
Aqui está o que funcionou para eu esclarecer o problema, depois de ler os documentos: http://mongoosejs.com/docs/promises.html
O exemplo no doc está usando a biblioteca de promessa bluebird, mas eu escolhi ir com promessas ES6 nativas.
No arquivo para o qual estou ligando
mongoose.connect
:[EDITAR: Obrigado a @SylonZero por trazer à tona uma falha de desempenho em minha resposta. Visto que essa resposta é tão bem vista, sinto o dever de fazer esta edição e encorajar o uso de
bluebird
promessas nativas. Leia a resposta abaixo para obter detalhes mais informados e experientes. ]fonte
Embora a resposta acima seja precisa e funcione, você deve considerar o problema de desempenho se tiver um aplicativo Node real de produção.
A solução acima usará promessas ES6 nativas - que são 4X mais lentas que o bluebird nos benchmarks que compartilhei abaixo. Isso pode afetar drasticamente o desempenho de uma API escrita em Node e usando MongoDB.
Eu recomendo usar o Bluebird:
Resultados de referência
Plataforma: (usando o Node mais recente no momento da escrita)
fonte
você tentou isso? Por exemplo :
se você criar um modelo a partir de uma instância do mangusto cuja promessa não foi redefinida - todas as consultas nesse modelo gerariam um aviso.
fonte
Acho que você tem sua resposta, mas eu uso global.promise com tratamento de erros
fonte
É preciso ter conexão com a ajuda da promessa na última versão do mangusto [este é o link] [1] [1]: http://mongoosejs.com/docs/promises.html
fonte
Basta adicionar o segundo parâmetro como um objeto ao método connect ().
Consulte: http://mongoosejs.com/docs/connections.html#use-mongo-client
fonte
Mongoose 4.8.6
Se você encontrar um erro como este:
Você também precisa definir opções que prometem a biblioteca a ser usada para o driver.
fonte
este trabalho para mim.
fonte