当前位置: 首页 > 知识库问答 >
问题:

使用nodejs进行测试时,得到一个无法处理的promise拒绝警告

舒斯伯
2023-03-14

我正在测试登录/注册页面。虽然注册部分工作正常,但当尝试使用相同的用户凭据登录时,页面根本没有响应。在控制台上,我得到了一个'UnHandledPromiseRejessWarning',尽管使用的是try捕捉块。

(节点:8248)UnHandledPromiseRejtionWarning:未处理的promise拒绝。这个错误要么是由于抛出一个没有捕获块的异步函数,要么是由于拒绝了一个没有用. cat()处理的promise。若要在未处理的promise拒绝时终止节点进程,请使用CLI标志--un处理-拒绝=严格(参见https://nodejs.org/api/cli.html#cli_unhandled_rejections_mode)。(拒绝id: 1)

(节点:8248)[DEP0018]弃用警告:未处理的promise拒绝已弃用。将来,未处理的promise拒绝将终止节点。具有非零退出代码的js进程。

exports.login = async(req, res) => {
    try {
        const { email, password } = req.body;

        if (!email || !password) {
            return res.status(400).render('login', {
                message: "PLEASE PROVIDE AN EMAIL AND/OR PASSWORD"
            })
        }

        db.query('SELECT * FROM users WHERE email = ?', [email], async(error, results) => {
            console.log(results);
            if (!results || !(await bcrypt.compare(password, results[0].password))) {
                res.status(401).render('login', {
                    message: 'EMAIL OR PASSWORD IS INCORRECT'
                })
            } else {
                const id = results[0].id;

                const token = jwt.sign({ id }, process.env.JWT_SECRET, {
                    expiresIn: process.env.JWT_EXPIRES_IN
                });

                console.log("THE TOKEN IS " + token);

                const cookieOptions = {
                    expires: new Date(
                        Date.now() + process.env.JWT_COOKIE_EXPIRES * 24 * 60 * 60 * 1000 
                    ),
                    httpOnly: true
                }

                res.cookie('jwt', token, cookieOptions);
                res.status(200).redirext("/");
            }
        })
    } catch (error) {
        console.log(error);
    }
}

任何形式的援助都会大有帮助。谢谢!:)

共有1个答案

丌官丰羽
2023-03-14

首先,您在发送响应时出现错误:

res.status(200).redirect("/");

注:x-

那么您就没有条件检查bcrypt.compare是否导致错误。

尝试以下代码:

exports.login = async(req, res) => {
const { email, password } = req.body;

    if (!email || !password) {
        return res.status(400).render('login', {
            message: "PLEASE PROVIDE AN EMAIL AND/OR PASSWORD"
        })
    }

    db.query('SELECT * FROM users WHERE email = ?', [email], async(error, results) => {
        console.log(results);
        try {
            if (!results || !(await bcrypt.compare(password, results[0].password))) {
            res.status(401).render('login', {
                message: 'EMAIL OR PASSWORD IS INCORRECT'
            })
            } else {
                const id = results[0].id;

                const token = jwt.sign({ id }, process.env.JWT_SECRET, {
                    expiresIn: process.env.JWT_EXPIRES_IN
                });

                console.log("THE TOKEN IS " + token);

                const cookieOptions = {
                    expires: new Date(
                        Date.now() + process.env.JWT_COOKIE_EXPIRES * 24 * 60 * 60 * 1000 
                    ),
                    httpOnly: true
                }

                res.cookie('jwt', token, cookieOptions);
                res.status(200).redirect("/");
            }
        } catch (error) {
            console.log(error);
        }
        
    })
}
 类似资料:
  • 我得到这个错误- (节点:18420)未处理的PromisejectionWarning:TypeError:无法读取未定义的属性“name” (节点:18420)未处理的PromisejectionWarning:未处理的promise拒绝。此错误源于在没有catch块的情况下抛出异步函数的内部,或者拒绝使用未处理的promise。catch()。要在未处理的promise拒绝时终止节点进程,请

  • 当我的角度前端发送请求时 我的nodejs服务器接收它 我添加了setTimeout,因为如果没有它,我就会得到错误:状态代码400请求失败。 因此,我可以发布订单到,但得到promise拒绝。 (节点:9220)UnhandledPromiseRejtionWarning:未处理的promise拒绝。这个错误要么是由于抛出一个没有捕获块的异步函数,要么是由于拒绝了一个没有用. cat()处理的p

  • 我正在构建一个SPFx angular 2组件,它有一个嵌套的子组件。子组件需要引用当前上下文,但如果我引用了: 我得到: SPComponentLoader.LoadComponent:错误:***无法从组件“FFAA6A0E-9EBA-40A0-BEC5-226D1DB53CAF”(RequirementsFormWebPart)加载入口点。defaultLoghandler.error@de

  • 我试图让Fastif-cookie工作在我的NestJS项目,我收到以下错误: (节点: 38325)未处理的promise拒绝警告:类型错误:无法读取未定义的属性“装饰请求” 未处理的PromisejectionWarning:未处理的promise拒绝。此错误源于在没有catch块的情况下抛出异步函数的内部,或者拒绝使用未处理的promise。catch()。要在未处理的promise拒绝时终

  • 我正在尝试编写一个jasmine测试,它有一个间谍, 是一个许诺列表。前几次承诺是拒绝,最后一次是成功。虽然测试顺利通过,但Node抱怨如下: 我的代码非常直接:我创建一个间谍,将它注入到我的代码中,调用我的代码,这将循环调用我的间谍直到它不拒绝,然后监视它被调用了5次。间谍是这样的: 被测试的代码在它的链中最后一个空的 来验证我没有引起那里的问题。AFICT,问题是Node看到我在执行 ,并认为

  • 本文介绍了单个promise组合器: 但我没有看到的是,一种运行所有promise的方法,但不是在个人promise被拒绝时短路。我如何确保所有的promise都得到履行,但我能处理拒绝和所有promise的解决?