如何解决Express +登录脚本
我的登录脚本正在与Postman一起使用,但是当我试图让React.js将其发布到服务器时,它便开始崩溃。
问题在于,当它检查用户时,由于某种原因,它无法传回return result
。
登录路线:
router.post('/login',async (req,res) => {
console.error(req.body.password)
try {
var check = await checkUser(req.body.email,req.body.password).catch((result) => {
console.log(result)
})
} catch(err){
console.error(err)
}
});
检查功能:
async function checkUser(username,password) {
var username = username;
var password = password;
var result;
await Users.findOne({email: username},async function (err,docs) {
// console.error(docs);
if (err) {
console.log(err)
} else {
const match = await bcrypt.compare(password,docs.password);
if(match) {
result = {userid:docs._id,success:"true"}
//result['userid'] = docs._id;
//result['success'] = true;
} else{
result = {success:"false"}
// result['success'] = false;
}
}
// console.error(result);
return result;
})
}
想知道是否有人可以看到我要去哪里哪里
解决方法
如果您使用.catch()
,请不要使用async / await
。要捕获错误,您已经拥有try / catch
router.post('/login',async (req,res) => {
console.error(req.body.password)
try {
var check = await checkUser(req.body.email,req.body.password)
} catch(err){
console.error(err)
}
});
下面有类似的问题。您可以对async / await
使用回调方法。之所以没有得到任何回报,是因为如果您仔细观察,就会将结果返回到回调函数...async function()..
。
但是,正如我所说的,不要使用回调+ async / await
请记住使用async / await
或链接.then() .catch()
或使用回调方法,但不要同时使用它们的坏处,并导致不安全的错误。
async function checkUser(username,password) {
var username = username;
var password = password;
var result;
try {
let user = await Users.findOne({ email: username });
if (!user) return "no user found";
const match = await bcrypt.compare(password,user.password);
if (match) {
result = { userid: user._id,success: "true" };
} else {
result = { success: "false" };
}
return result;
} catch (err) {
console.log(err);
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。