簡體   English   中英

Node.js TypeError:未定義不是函數

[英]Node.js TypeError: undefined is not a function

我正在嘗試在我的模型用戶上調用此函數(我正在使用貓鼬)。 像這樣:

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錯誤,或第一次滴答時發生“錯誤”事件^ TypeError:未定義不是函數

我做錯了什么?

謝謝,

您有2個不同的callback變量,當前:

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

由於它們共享相同的標識符,因此第二個將“遮蓋”第一個,從而使第一個在匿名函數中不可訪問。

要使用1st,您必須重命名其中之一-也許是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(...);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM