gpt4 book ai didi

node.js - NodeJs 中被拒绝的 Promise 解析

转载 作者:太空宇宙 更新时间:2023-11-03 22:48:42 24 4
gpt4 key购买 nike

我无法捕获被拒绝的 promise ,而且我不明白我哪里出了问题。这是我所拥有的

exports.signIn = (username, password) => {
return new Promise((resolve, reject) => {
pool.query(
"select * from user where username=? order by id asc limit 1",
[username],
(err, result, fields) => {
if (!err) {
console.log("user result: ", result);
if (result.length === 1) {
let user = result[0];
bcrypt.compare(password, user.password, (error, res) => {
if (error) {
reject(error);
}
if (res) {
console.log("user found: ",user.username);
resolve(user);
} else {
console.log("Incorrect password");
reject("Unauthorized Access");
}
});
} else {
console.log("user not found");
reject("Invalid username");
}
}
}
);
});
};

这就是我使用 promise 的方式

app.post("/signin", (req, res, next) => {
let body = req.body;
let password = body.password;
let username = body.username;
db.signIn(username, password)
.catch(err => {
res.status(200).json({ err });
})
.then(result => {
console.log("signin: ", result);
res.status(200).json({ result });
});
});

当我输入正确的密码时,它会正确解析,但当我输入错误的密码时,它仍然会解析并显示登录控制台消息和 UnhandledPromiseRejectionWarning 警告。我真的不知道我哪里出了问题,也许多加一双眼睛就可以了。

最佳答案

您应该将 Promise 用作:

app.post("/signin", (req, res, next) => {
let body = req.body;
let password = body.password;
let username = body.username;
db.signIn(username, password)
.then(result => {
console.log("signin: ", result);
res.status(200).json({ result });
}).catch(err => {
res.status(200).json({ err });
});
});

因为,在catch之后,如果你添加任意数量的then处理,它都会执行它们。

关于node.js - NodeJs 中被拒绝的 Promise 解析,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59460767/

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