save() 不是函数 haraka plugin + mongoose

save() is not a function haraka plugin + mongoose

我正在尝试为 haraka 邮件服务器创建一个插件以支持将电子邮件保存到 mongodb。 该插件 运行 很好,但是当我发送测试电子邮件时,它给我这个错误:

Plugin queue/mongo_email failed: TypeError: Email.save is not a function

这是插件代码:

var mongoose         = require('mongoose');

var mongodbUri = "mongodb://localhost:27017/";

var options = {
  useMongoClient: true,
  socketTimeoutMS: 0,
  keepAlive: true,
  reconnectTries: 30
};

var db = mongoose.connect(mongodbUri, options);

var EmailSchema = mongoose.Schema({
  emailFrom: String,
  emailMsg: String,
  emailRcv: String,
  emailSubject: String
});

var Email = mongoose.model('Email', EmailSchema);

exports.hook_queue = function(next, connection){

    var transaction   = connection.transaction;
    var receivedDate  = transaction.header.headers.date;
    var subjectLine   = transaction.header.headers.subject;

    Email.save({
      emailFrom: transaction.mail_from,
      emailMsg: transaction.data_lines,
      emailRcv: receivedDate,
      emailSubject: subjectLine
    });

    next();

}

答案:

var mongoose         = require('mongoose');

var mongodbUri = "mongodb://localhost:27017/";

var options = {
  useMongoClient: true,
  socketTimeoutMS: 0,
  keepAlive: true,
  reconnectTries: 30
};

var db = mongoose.connect(mongodbUri, options);

var EmailSchema = mongoose.model('Email',{
  emailFrom: String,
  emailMsg: String,
  emailRcv: String,
  emailSubject: String
});


exports.hook_queue = function(next, connection){

    var transaction   = connection.transaction;
    var receivedDate  = transaction.header.headers.date;
    var subjectLine   = transaction.header.headers.subject;

    var Email = new EmailSchema({
      emailFrom: transaction.mail_from,
      emailMsg: transaction.data_lines,
      emailRcv: receivedDate,
      emailSubject: subjectLine
    });

    Email.save();

    next();

}

事务变量 var transaction = connection.transaction; 是一个 object 包含有关新电子邮件的所有信息。可以修改 mongodb 架构 EmailSchema 以支持其他选项,例如消息 headers、附件等