通过猫鼬模型发送回报

时间:2014-08-26 08:12:11

标签: javascript mongoose

所以我有这个模型:

'使用严格的';

var mongoose = require('mongoose');

var subscriberModel = function () {
  var subscriberSchema = mongoose.Schema({
    email: String
  });

function validateEmail(email) { 
  var re = /^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/;
  return re.test(email);
}

subscriberSchema.methods.validateSubscriber = function (subs, otherModel) {
  var code = 0;
  if (validateEmail(subs.email)) {
    mongoose.model('Subscriber').findOne({'email': subs.email},
    function(err, subscriber){
      if (err) {
        code = 2;
      } else if (subscriber) {
        code = 3;
      } else {
        subs.save(function(err){
          if (err) {
            code = 2;
          }
          code = 4;
          });
        }
      });
    } else {
      code = 1;
    }
  };

  return mongoose.model('Subscriber', subscriberSchema);
};

module.exports = new subscriberModel();

我用另一种文件称呼它:

    var subscriberModel = require('../models/subscriber');
    var subscriber = new subscriberModel({email: req.body.email.trim()});
    var code = subscriber.validateSubscriber(subscriber, buyModel);
    console.log('code = %s', code); // => displays "code = 0"

我认为这是一个范围问题或类似问题(因为我不会使用任何回调 - 或许我应该 - )但我找不到问题,也找不到解决方案。 那么,我如何获得返回的代码值? 提前谢谢。

[编辑]:我发现了问题所在并编辑了代码来解释它。显然我的var是在mongoose的回调中设置的,所以现在我的问题是;我如何等待此回调结束,因为我需要结果在网页中向用户显示消息?

1 个答案:

答案 0 :(得分:0)

好的,我找到了答案。 我编辑了我的函数validateSubscriber以发送回调:subscriberSchema.methods.validateSubscriber = function (subs, callback)。并删除了里面的其他模型。

这样,当我在其他文件中调用它时,我只需要这样做:

subscriber.validateSubscriber(subscriber, function(code){
    buyModel.code = code;
    console.log('code = %s', buyModel.code);
}

获取代码并等待答案。

我希望它帮助了别人。