等待后未定义的快速异步路由日志记录

Express async route logging undefined after await

我正在用 Typescript 编写一个 Express 端点来更新数据库中的用户密码,但是在处理多个 queries/synchronous 代码时遇到了一些问题。

我现在的问题是我正在尝试等待函数的 return,但它似乎没有 正在等待

我的路线是这样的:

router.put("/:userId", validateUser, async (req: any, res: Response) => {
    const result: any = await updatePassword(req.body.password, req.body.confirmPassword, req.params.userId);
    console.log(result) //LOGS UNDEFINED????
    if (result.status !== 200) res.status(result.status).send({ message: result.message, code: result.code });
    res.send("Success!");
});

updatePassword 函数如下所示:

const updatePassword = async (password: string, confirmPassword: string, userId: string) => {
    if (password !== confirmPassword) {
        return { status: 409,  message: Errors.mismatchingPasswordMessage, code: Errors.mismatchingPasswordCode };
    }

    const hashedPassword = bcrypt.hashSync(password, 10);
    //update the password in the DB
    pool.query("UPDATE users SET password = ? WHERE userId = ?", [hashedPassword, userId], (err: MysqlError, result: any) => {
        if (err) {
            console.log(err);
            return { status: 500,  message: err.message, code: err.code };
        }
        if (result.changedRows !== 1) {
            return { status: 500,  message: "Password could not be updated!" };
        }

        return { status: 200 };
    });
}

为什么这条路线不正确正在等待updatePassword的结果??

在此先感谢您的帮助。

问题是,您在这部分混用了 async/await 和回调样式

 pool.query("UPDATE users SET password = ? WHERE userId = ?", [hashedPassword, userId], (err: MysqlError, result: any) => {
        if (err) {
            console.log(err);
            return { status: 500,  message: err.message, code: err.code };
        }
        if (result.changedRows !== 1) {
            return { status: 500,  message: "Password could not be updated!" };
        }

        return { status: 200 };
    });

函数updatePassword直接跳到这一块后的下一行,没什么。所以它 returns undefined.

您需要用 async/await 代码替换此块。像 :

try {
       const result = await pool.query("UPDATE users SET password = ? WHERE userId = ?", [hashedPassword, userId]);
        
        if (result.changedRows !== 1) {
            return { status: 500,  message: "Password could not be updated!" };
        }

        return { status: 200 };
}
catch (err){

       console.log(err);
       return { status: 500,  message: err.message, code: err.code };
        
}