Grunt任务未调用外部javascript任务
我正在尝试使用grunt任务向mongodb插入数据。Init.js是位于“tasks”目录中的文件。因此,我将任务注册为: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.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')在您的GrunFile中编写>代码