我正在尝试在我的模型User上调用此函数(我正在使用mongoose)。像这样:
UserSchema.statics.exists = function exists(req,email, callback) {
this.findOne({
email : email
}, function(err, user,callback) {
if(err) {
console.error(err);
return callback(err);
}
if(!user) {
// console.log("Not user");
return callback(null, false);// produce error
}
if(!user.valid) {
console.log("User invalid");
var hostname = req.headers.host;
// hostname = 'localhost:8080'
//var pathname = url.parse(req.url).pathname; // pathname = '/MyApp'
var base_url = 'http://' + hostname + '/activation?key=' + user.account_no;
user.verifyEmail(base_url, user, function(err, result) {
if(err) {
console.error(err);
return callback(err);
} else {
//if(email sent)
if(result) {
return callback("Please check your email to activate your account");
} else {
return callback("Activation error please contact WOWITO support");
}
}
});
}
return callback(null, user);
});
}
然后我收到以下错误:
的node.js:201 扔掉; // process.nextTick错误,或第一次打勾时的'错误'事件 ^ TypeError:undefined不是函数
我做错了什么?
谢谢,
答案 0 :(得分:4)
目前有2个不同的callback
个变量:
UserSchema.statics.exists = function exists(req, email, callback) { // 1st
this.findOne({
email : email
}, function(err, user, callback) { // 2nd
// ...
当他们共享相同的标识符时,第二个将“遮蔽”第一个,使第一个在匿名函数中无法访问。
要使用第一个,您必须重命名其中一个 - 可能是existsCallback
和/或findOneCallback
。
您也可以直接删除第二个,因为它似乎是undefined
:
UserSchema.statics.exists = function exists(req, email, callback) {
this.findOne({
email : email
}, function(err, user) {
// ...
您还假设为callback
传递了一个值,JavaScript实际上并不需要或强制执行。
您可以在调用之前测试一个值来解决此问题:
if (callback) callback(...);
或者在未定义时将其设置为“无操作”功能:
callback = callback || function() { return true; };
//...
callback(...);