如何在Node.js的登录功能中正确添加async/await异步处理
核心问题说明
- 你当前的代码虽然给
findUser加了async修饰,但没有用await等待数据库查询的异步结果,函数会直接返回初始值null - 控制器中调用异步的
findUser方法时没有加await,拿到的只是Promise对象而非实际查询结果
修正后的userService.js
exports.findUser = async (email, password) => { try { // 用await等待数据库查询结果返回 const data = await User.findOne({ email: email, password: password, }); // 查询到数据就返回data,没查询到默认返回null return data; } catch (err) { // 异常处理可根据需要自行调整,这里按原有逻辑返回null即可 console.error('查询用户出错:', err); return null; } };
修正后的userController.js
// 给login函数加上async修饰,内部才能使用await exports.login = async (req, res, next) => { var email = req.body.email; var password = req.body.password; // 调用异步方法前加await,等待结果返回 var data = await userService.findUser(email, password); console.log(data); if (data !== null) { res.status(200).json({ message: "登录成功" }); // 原有代码的message值为"null"可按需修改 } else { res.status(401).json({ message: "邮箱或密码错误!" }); } };
改动说明
- 移除了
findUser中冗余的.then()和.catch()链式调用,改用await+try/catch的写法更符合async/await的使用规范 - 所有异步操作都加上了
await等待结果返回,避免拿到未完成的Promise对象 - 给控制器的
login方法加上了async修饰,这是内部使用await的前提
内容的提问来源于stack exchange,提问作者MaditionSky
相关产品推荐
相关产品推荐

