所以我有这个模型:
'使用严格的';
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的回调中设置的,所以现在我的问题是;我如何等待此回调结束,因为我需要结果在网页中向用户显示消息?
答案 0 :(得分:0)
好的,我找到了答案。
我编辑了我的函数validateSubscriber
以发送回调:subscriberSchema.methods.validateSubscriber = function (subs, callback)
。并删除了里面的其他模型。
这样,当我在其他文件中调用它时,我只需要这样做:
subscriber.validateSubscriber(subscriber, function(code){
buyModel.code = code;
console.log('code = %s', buyModel.code);
}
获取代码并等待答案。
我希望它帮助了别人。