gpt4 book ai didi

Node.js "/login"数据库错误

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

我试图从哈希比较中得到“true”。但是当我写入数据库中不存在的用户名时,就会出现问题。例如:如果没有“jack.33”作为用户名,则会抛出 mysql 错误并停止服务器。我如何阻止此错误或创建解决方案?这是错误:

    throw err; // Rethrow non-MySQL errors
^
TypeError: Cannot read property 'password' of undefined


app.post("/login", function(request, response) {
var username = request.body.username;
var pass = request.body.pass;

con.query("select password from user where username = " + "\"" + username + "\"",function (err, result) {
if(err) throw err;
var passer = result[0].password;
bcrypt.compare(pass, passer, function (err, res) {
console.log(res);
if (res === true) {
response.send("success")
}else{
response.send("nop")
}
});
});
});

最佳答案

您遇到的错误不是由您的数据库驱动程序引发的。

类型错误:无法读取未定义的属性“密码” 是当代码需要对象不存在的属性时引发的典型错误。

您的 SELECT 查询可以返回 0 或更多行,当没有返回任何内容时,我怀疑您的数据库驱动程序为您提供了一个空数组 []。因此,[] 的索引 0 将是未定义

现在,undefined.password 将会出现类似的错误,因为属性 password 不是 undefined 对象的一部分。

示例:

var result = []; // Assume SELECT query returns 0 row.
result[0].password;

除了检查err是否被定义之外。您的代码还必须适应用户不存在的情况。

if result.length === 1 这样的简单检查应该可以修复您的逻辑错误。

您可能想知道如果返回多于 1 行怎么办?这通常是不可能的,除非您的数据库设计不好,用户名不唯一。换句话说,你的问题更大。

关于Node.js "/login"数据库错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45179322/

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