Node.js mongoose保存功能不工作。post(';保存';)未被调用,但没有错误
我对web开发非常陌生,有java/android背景。我阅读了关于mongoose save()未保存到db的所有其他so问题,但仍然无法将其写入db 谢谢大家! 我编写了screery.js,它定义了我的模式,并编写了另一个脚本groceryquerys.js来写入和读取数据库。调用save-prehook,但不调用save-posthook。这是我使用的命令: 节点groceryquerys.js插入水果,苹果,appl.jpg,.46 以下是输出: (节点:14548)弃用警告:Node.js mongoose保存功能不工作。post(';保存';)未被调用,但没有错误,node.js,mongodb,express,mongoose,mongoose-schema,Node.js,Mongodb,Express,Mongoose,Mongoose Schema,我对web开发非常陌生,有java/android背景。我阅读了关于mongoose save()未保存到db的所有其他so问题,但仍然无法将其写入db 谢谢大家! 我编写了screery.js,它定义了我的模式,并编写了另一个脚本groceryquerys.js来写入和读取数据库。调用save-prehook,但不调用save-posthook。这是我使用的命令: 节点groceryquerys.js插入水果,苹果,appl.jpg,.46 以下是输出: (节点:14548)弃用警告:open
open()。看
连接到mongodb
参数:水果,苹果,苹果.46
(节点:14548)弃用警告:Mongoose:mpromise(Mongoose的默认承诺库)已弃用,请插入您自己的承诺库:
拯救苹果
grovery.js:
var mongoose=require('mongoose');
var grocerySchema=newmongoose.Schema({
姓名:{
类型:字符串,
独特的:错误,
要求:正确,
修剪:对
},
img:{
类型:字符串,
独特的:错误,
必填项:false,
修剪:对
},
价格:{
类型:数字,
独特的:错误,
要求:正确,
修剪:对
},
类别:{
类型:字符串,
独特的:错误,
要求:正确,
修剪:对
}
});
grocerySchema.pre('save',函数(下一步){
var=这个;
console.log(“保存”+杂货店名称);
next();
});
grocerySchema.post('save',函数(下一步){
控制台日志(“保存后”);
next();
});
grocerySchema.statics.COLLECTION_NAME=函数(){
退回"杂货";;
}
grocerySchema.methods.toString=函数(){
console.log(groffy.COLLECTION_NAME()+”,Category:“+this.Category+”是“+this.NAME+”,costs“+this.price+”);
};
var Grocery=mongoose.model('groceries',grocerySchema);
模块出口=杂货店
保存
返回一个承诺,您必须等待:
newGrocery.save(function(err,newGrocery) {
if (err) {
console.log(err);
throw err;
}
newGrocery.toString(); // you had a typo here btw
}).then(function() { db.close();});
在mongoose有机会保存任何内容之前,您的代码会运行db.close()
。代码中的主要问题是,您正在保存之前关闭与db的连接。请注意,mongoose中的所有db操作都是异步的,调用异步函数只是为事件循环的下一个周期调度操作
您要改为执行此操作:
newGrocery.save(function(err, newGrocery) {
if (err) {
throw err;
}
// grocery.toString(); <- typo here btw, param is called newGrocery
}).then(function() {
db.close();
});
奖金
要消除关于不推荐使用open()和connect()的警告,请使用此选项选择新的连接逻辑:
mongoose.connect(url, {
useMongoClient: true,
});
要消除关于承诺的警告,请在要求猫鼬后添加以下内容:
// Use native promises
mongoose.Promise = global.Promise
// Use native promises
mongoose.Promise = global.Promise