类型错误: 无法调用未定义对象的 'toLowerCase' 方法

3

我遇到了一个错误,但我不知道为什么。在将字符插入数据库之前,我尝试将所有字符转换为小写字母以进行比较。 在第一个函数this.addUser中,我调用toLower将其转换为小写字母,没有问题,但在第二个函数this.checkPublicUsername中,我调用toLower时,在终端上显示了一个错误,说TypeError: Cannot call method 'toLowerCase' of undefined

function toLower (text) {
    return text.toLowerCase();
}

this.addUser = function(data,callback) {
    "use strict";
    // Generate password hash
    var salt = bcrypt.genSaltSync();
    var password_hash = bcrypt.hashSync(data.password, salt);
    // transform all character into lowercase
    var real = toLower(data.publicUsername);
    // Create user document
    var user = {
        '_id': data.email,
        'email':data.email,
        'password': password_hash,
        'name':{
            'firstName': data.firstName,
            'lastName': data.lastName
        },
        'penName': data.penName,
        'publicUsername':{
            'display':data.publicUsername,
            'real':real
        }
    };
    users.insert(user, function (err, result) {
        "use strict";

        if (!err) {
            console.log("Inserted new user");
            return callback(null, result[0]);
        }
        if (err) console.log(err)

        return callback(err, null);
    });
}

this.checkPublicUsername = function(data,callback) {
    "use strict";
    var real = toLower(data);
    var publicUsername = {
        "publicUsername.real":real
    }
    users.find(publicUsername).count(function(err, result) {
        callback(null,result);
    })

}

调用checkPublicUsername函数

 users.checkPublicUsername(data.publicUsername, function(err, result){
     if(result){
     callback(new Error('"'+data.publicUsername+'" has been taken. Please choose another.'), null);
             }
        });

1
你能展示一下调用 this.checkPublicUsername() 的代码吗? - Paul Mougel
看起来 data.publicUsername 不存在。用 console.log(data) 打印出来并展示一下 data 是如何创建的。 - Paul Mougel
哦,它显示未定义。 - John Lim
我可以这样写吗?如果(data != undefined){ var real = toLower(data); } - John Lim
你需要理解为什么它是未定义的。正如Paul所说,调用checkPublicUserName之前data是如何创建的? - Aioros
显示剩余2条评论
2个回答

5
您会收到此错误,是因为data.publicUsername未定义,请检查您将要传递给此函数的值。

2
我出现此错误的原因是由于在尝试执行此功能时,data.publicUsername 未定义。
this.checkPublicUsername = function(data,callback) {
    "use strict";
    var real = toLower(data);
    var publicUsername = {
        "publicUsername.real":real
    }
    users.find(publicUsername).count(function(err, result) {
        callback(null,result);
    })

}

出现错误的原因是real未定义,如果要避免这个问题,只需简单地编写一个if else语句,如果real未定义,则不执行此函数。

 users.find(publicUsername).count(function(err, result) {
            callback(null,result);
        })

if else 可以写成以下形式:

 if(data != undefined){
            var real = toLower(data);
        }

希望这可以帮到您!

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接