Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/36.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/css/32.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
Grunt任务未调用外部javascript任务_Javascript_Node.js_Mongoose_Gruntjs - Fatal编程技术网

Grunt任务未调用外部javascript任务

Grunt任务未调用外部javascript任务,javascript,node.js,mongoose,gruntjs,Javascript,Node.js,Mongoose,Gruntjs,我正在尝试使用grunt任务向mongodb插入数据。Init.js是位于“tasks”目录中的文件。因此,我将任务注册为: grunt.registerTask('dbinit', function () { grunt.task.loadTasks('tasks'); } 任务目录包含Init.js: var mongoose = require('mongoose'), config = require('/lib/config/config.js'), mongoose = re

我正在尝试使用grunt任务向mongodb插入数据。Init.js是位于“tasks”目录中的文件。因此,我将任务注册为:

grunt.registerTask('dbinit', function () {
grunt.task.loadTasks('tasks');
}
任务目录包含Init.js:

 var mongoose = require('mongoose'),
 config = require('/lib/config/config.js'),
 mongoose = require('mongoose'),
 dbmodel = require('/lib/models/user.js'),
 db;

mongoose.connect(config.mongo.uri, config.mongo.options);
db = mongoose.connection;
db.on('open', function () { 
var user = new dbmodel.User({
 userId : 'bond007'
});
console.log('Adding seed user: '+user);

newUser.save(function (err, product, numberAffected) {
if (err) {
   console.log(err); 
} else {
  console.log("saved user: "+user.userId);
}  
db.close();

});
}); 

问题是从未调用Init.js。我不确定这是异步问题还是调用Init.js的问题,但我看到“dbinit”任务“完成时没有错误”。

默认情况下,Grunt任务同步执行,任务将完成,不会等待mongoose连接打开。在任务中使用
this.async()
,让任务等待

一个更好的策略可能是将
tasks/Init.js
中的部分封装在如下任务中:

var mongoose = require('mongoose'),
config = require('/lib/config/config.js'),
mongoose = require('mongoose'),
dbmodel = require('/lib/models/user.js'),
db;

grunt.registerTask('dbinit', function() {
  var done = this.async();
  mongoose.connect(config.mongo.uri, config.mongo.options);
  db = mongoose.connection;
  db.on('open', function () { 
    var user = new dbmodel.User({
      userId : 'bond007'
    });
    console.log('Adding seed user: '+user);

    newUser.save(function (err, product, numberAffected) {
      if (err) {
        console.log(err); 
      } else {
        console.log("saved user: "+user.userId);
      }  
      db.close();
      done(); // Call done to close the task
    });
  });
});
然后只需使用
grunt.loadTasks('tasks')代码