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回调的更多信息