Javascript Mongoose回调函数未启动
我已经看到这个问题在这里出现了很多次,但是没有一个解决方案对我有效。代码如下:Javascript Mongoose回调函数未启动,javascript,node.js,mongodb,mongoose,Javascript,Node.js,Mongodb,Mongoose,我已经看到这个问题在这里出现了很多次,但是没有一个解决方案对我有效。代码如下: var mongoose = require('mongoose'); var Schema = mongoose.Schema; var db = mongoose.connection; var dbUrl = 'mongodb://george:paradamodei123@ds037234.mongolab.com:37234/mydb'; var perosonSchema = new Schema({
var mongoose = require('mongoose');
var Schema = mongoose.Schema;
var db = mongoose.connection;
var dbUrl = 'mongodb://george:paradamodei123@ds037234.mongolab.com:37234/mydb';
var perosonSchema = new Schema({
id: Number,
name: String,
age: Number,
stories: [{type: Schema.Types.ObjectId, ref: "Story"}]
});
var storySchema = new Schema({
_creator: {type: Number, ref: "Person"},
title: String,
fans: [{type: Number, ref: "Person"}]
});
var Story = mongoose.model("Story", storySchema);
var Person = mongoose.model("Person", perosonSchema);
db.on('error', function () {
console.log('there was an error communicating with the database');
});
mongoose.connect(dbUrl);
console.log('connected!');
var aaron = new Person({id: 0, name: "Aaron", age: 32});
console.log("created aaron");
aaron.save(function(err) {
console.log("no error");
var story1 = new Story({
title: "Once upon a time",
_creator: aaron.id
});
story1.save(function (err){
if(err) return console.log("err");
});
});
console.log("finished");
db.close();
process.exit();
所以,当我运行脚本时,它会记录它所连接的,它创建了aaron,跳过“无错误”,只记录“完成”。值得一提的是,我在mongoose和node是一个完全的乞丐,如果这是一个简单的问题,很抱歉,但我无法解决。这是因为aaron.save是asyncron调用,它调用,但您的程序不等待响应,只是继续工作,并退出进程。当aaron被保存时,进程退出; 要修复它,只需在回调函数中调用finished和db.close 像这样的
aaron.save(function(err) {
console.log("no error");
var story1 = new Story({
title: "Once upon a time",
_creator: aaron.id
});
story1.save(function (err){
if(err) return console.log("err");
console.log("finished");
db.close();
process.exit();
});
});
这样,您的代码将拯救aaron。保存后将创建故事,保存,保存后关闭数据库并退出进程
在此处阅读有关nodejs回调的更多信息