2

如果我使用节点运行它,它会打印“连接到数据库”:

var MongoClient = require("mongodb").MongoClient;
MongoClient.connect("mongodb://localhost/db1", function(err, db) {
  if (err) {
    throw err;
  }
  console.log("Connected to Database");
  db.close();
});

但是,如果我尝试使用 Grunt 任务运行它,它什么也不做,而且静默。

module.exports = function(grunt) {
  return grunt.registerTask("task", "subtask", function() {
    var MongoClient = require("mongodb").MongoClient;
    return MongoClient.connect("mongodb://localhost/db1", function(err, db) {
      if (err) {
        throw err;
      }
      console.log("Connected to Database");
      db.close();
    });
  });
};

谁能告诉我为什么应该这样做,也许可以提供一种解决方法?

4

1 回答 1

2

一切正常。

数据库连接是异步的,因此在连接建立之前咕噜声会“杀死”你的任务。

您的任务应如下所示:

module.exports = function(grunt) {
  return grunt.registerTask("task", "subtask", function() {
    var done = this.async();
    var MongoClient = require("mongodb").MongoClient;
    MongoClient.connect("mongodb://localhost/db1", function(err, db) {
      if (err) {
        done(false);
      }
      console.log("Connected to Database");
      db.close();
      done();
    });
  });
};

grunt 文档中有一个完整的部分关于此:为什么我的异步任务没有完成?

于 2013-11-11T17:59:17.897 回答