保存猫鼬对象的Grunt任务

时间:2013-04-30 20:41:09

标签: mongodb mongoose gruntjs

我正在尝试编写一个简单的grunt任务来将对象保存到mongoose集合中。我遇到了save命令的问题。它不会打印出任何错误或保存消息。我不知道为什么。我已经通过mongo shell检查了这个集合,但它没有保存。

var db = require('./db/schema');

module.exports = function(grunt) {

  grunt.registerTask('adduser', 'add a user to the database', function(usr) {
        var user = new db.userModel({ username: usr});

        console.log(user);
        user.save(function(err) {
          if(err) {
            console.log('error: ' + err);
          } else {
            console.log('saved user: ' + user.username);
          }
        });
  });

};

输出

$ grunt adduser:bob
Running "adduser:bob" (adduser) task
{ username: 'bob' }

Done, without errors.

输出应该显示'错误:错误消息'或'已保存用户:bob'。但是这段代码由于某种原因没有被执行。

1 个答案:

答案 0 :(得分:1)

user.save调用是异步的,因此您需要将Grunt任务置于异步模式,如here所示。

它应该是这样的:

grunt.registerTask('adduser', 'add a user to the database', function(usr) {
    var user = new db.userModel({ username: usr});

    // Invoke async mode
    var done = this.async();

    console.log(user);
    user.save(function(err) {
      if(err) {
        console.log('error: ' + err);
      } else {
        console.log('saved user: ' + user.username);
      }

      // Signal to Grunt that the async task is complete.
      done();
    });
});