首页 > 解决方案 > 一旦发送了错误的凭证,Express 服务器就会崩溃

问题描述

我正在尝试使用电子邮件和密码登录,但如果我使用正确的数据登录,那就没问题了。如果我输入错误的任何一个字段,那么它会显示预期的输出并立即崩溃,我必须从 npm start 重新启动服务器。如果我不重新启动服务器,之后将无法进行进一步的 API 调用。

用户路线:

// Login

    router.post('/login', async (req, res) => {
        try {
            const user = await User.findOne({
                email: req.body.email,
            });
            !user && res.status(401).json('email does not exist in the DB');
    
            const bytes = CryptoJS.AES.decrypt(
                user.password,
                process.env.SECRET_KEY
            );
            const originalPassword = bytes.toString(CryptoJS.enc.Utf8);
    
            originalPassword !== req.body.password &&
                res.status(401).json('wrong password');
    
            const accessToken = jwt.sign(
                {
                    id: user._id,
                },
                process.env.SECRET_KEY,
                { expiresIn: '300000' }
            );
    
            const { password, ...info } = user._doc;
    
            res.status(200).json({ ...info, accessToken });
        } catch (err) {
            res.status(500).json(err);
        }
    });

标签: node.jsreactjsexpress

解决方案


res.json当您打算提前退出函数时,请在调用中添加 return 语句。否则,您的其余代码将继续执行并引发错误,因为响应已发送。

您的代码抛出错误,因为您的响应被多次发送。然后,您的 catch 试图发送另一个响应,这会引发另一个错误。


推荐阅读