你如何得到一个保存新的简单mongodb文件的繁琐任务?

时间:2014-03-06 20:59:16

标签: node.js mongodb express mongoose gruntjs

我在使用mongoose和自定义grunt任务时遇到了问题。我想要做的就是创建一个行为类似于简单的put请求的任务,通过获取我在命令行中给出任务的参数并处理/保存到数据库。但是,当我希望在添加它之后在数据库中找到它...我无法在任何地方找到它。

目标是创建一个新公司,并从“grunt addcompany:a:b:c:d”命令中保存4个简单参数。

这是“公司”模式(我保持基本):

var mongoose = require('mongoose'),
Schema = mongoose.Schema;

var Company = new Schema({
  name: String,
  email: String,
  info: String,
  also: String
});

module.exports = mongoose.model('Companies', Company);

这是我的Gruntfile.js的顶部:

var schemaCompany = require('./models/company'),
mongoose = require('mongoose'),
db = mongoose.connection,
Company = mongoose.model('Companies', schemaCompany);

这是任务:

grunt.registerTask('addcompany', 'add a company', function(n,e,i,a) {
  var done = this.async();
  mongoose.connect('mongodb://localhost/app-test');
  db.on('open', function () { 

    var co = new Company({
      name: n,
      email: e,
      info: i,
      also: a
    });

    co.save(function (err) {
      if (err) return handleError(err);
      console.log('success!');
    });

    console.log(co);

    db.close();
  });
});

当我在CLI中键入此内容时:     grunt addcompany:name:email:description:more_stuff CLI返回:

  Running "addcompany:name:email:description:more_stuff" (addcompany) task
  {
    "name": "name",
    "email": "email",
    "info": "description",
    "also": "more_stuff",
    "_id" : ObjectID(" ~object id here~ "),
    "__v" : 0
  }

虽然它创建了一个对象ID,但它永远不会保存在任何地方。 app-test db中的公司集合中没有任何内容出现。我错过了什么?

感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

试试这个:

db.on('open', function () { 

var co = new Company({
  name: n,
  email: e,
  info: i,
  also: a
});

co.save(function (err) {
   // log the doc
   console.log(co);
   // log the error
   console.log(err);
  if (err) return handleError(err);
  console.log('success!');
  // close the database after 'co' is saved.
  db.close();
  done(true);
});

});