Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/34.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js mongoose保存功能不工作。post(';保存';)未被调用,但没有错误_Node.js_Mongodb_Express_Mongoose_Mongoose Schema - Fatal编程技术网

Node.js mongoose保存功能不工作。post(';保存';)未被调用,但没有错误

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

我对web开发非常陌生,有java/android背景。我阅读了关于mongoose save()未保存到db的所有其他so问题,但仍然无法将其写入db

谢谢大家!

我编写了screery.js,它定义了我的模式,并编写了另一个脚本groceryquerys.js来写入和读取数据库。调用save-prehook,但不调用save-posthook。这是我使用的命令:

节点groceryquerys.js插入水果,苹果,appl.jpg,.46

以下是输出:

(节点:14548)弃用警告:
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