gpt4 book ai didi

javascript - Node.js 类型错误 : undefined is not a function

转载 作者:太空宇宙 更新时间:2023-11-04 03:12:14 27 4
gpt4 key购买 nike

我正在尝试在我的模型用户上调用此函数(我正在使用 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 扔 e;//process.nextTick 错误,或第一个刻度上的“error”事件 ^类型错误:未定义不是函数

我做错了什么?

谢谢

最佳答案

当前您有 2 个不同的callback 变量:

UserSchema.statics.exists = function exists(req, email, callback) { // 1st
this.findOne({
email : email
}, function(err, user, callback) { // 2nd
// ...

由于它们共享相同的标识符,第二个将“隐藏”第一个,从而使第一个在匿名函数中不可访问。

要使用第一个,您必须重命名其中一个 - 也许是 existsCallback 和/或 findOneCallback

您也可以直接删除第二个,因为无论如何它似乎都是未定义:

UserSchema.statics.exists = function exists(req, email, callback) {
this.findOne({
email : email
}, function(err, user) {
// ...

您还假设正在为回调传递一个值,而 JavaScript 实际上并不要求或强制执行该值。

您可以通过在调用之前测试值来解决此问题:

if (callback) callback(...);

或者在未定义时将其设置为“无操作”函数:

callback = callback || function() { return true; };
//...
callback(...);

关于javascript - Node.js 类型错误 : undefined is not a function,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10419705/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com