【发布时间】:2021-04-01 13:01:11
【问题描述】:
我正在尝试在我的 Web 应用程序中设置登录功能,其中后端使用 MongoDB 数据库并使用 NodeJS (express) 完成,而前端使用 VueJS。但是,每当我尝试将响应从后端发送回前端时,前端似乎永远不会得到它。邮递员也从未得到回应。代码如下:
后端:
app.post('/login', async (req,res) => {
let qusername;
let qpassword;
console.log(req.body);
await User.find({username: req.body.username}, (err,user) => {
if (user == null){
return res.status(400).send('User not found');
}
qusername = user[0].username;
qpassword = user[0].password;
});
try{
const user = { username: qusername, password: qpassword};
await bcrypt.compare(req.body.password, user.password, (err,res) => {
if(err){
res.status(500).send(err.message);
}
if(res){
const accessToken = jwt.sign(user, JWT_SECRET, { expiresIn: 300}, (err, accessToken) => {
console.log(accessToken);
if(err) {
res.status(500).send(err.message);
}
console.log("before");
res.send(accessToken);
console.log("after");
});
}
else {
res.send('Wrong password');
}
});
}
catch(e) {
console.log(e);
res.status(500).json({ message: e.message });
}
});
前端:
async getToken({ commit }, { user }) {
try {
const response = await axios.post(`${HOST}:${PORT}/login`, user);
const authToken = response.data;
commit("setToken", { authToken });
} catch (e) {
console.error(e);
}
}
后端正在记录正确的请求正文、JWT 和“之前”,而不是“之后”。所以问题确实出现在 res.send() 中。
【问题讨论】:
-
您正在使用两个名称为“res”的变量。因此,当您调用函数
await bcrypt.compare(req.body.password, user.password, (err,res)时,您应该覆盖变量 res。我认为如果您将此 var 的名称从 res 更改为另一个名称,您的代码应该可以再次工作。
标签: node.js vue.js web request backend