代码之家  ›  专栏  ›  技术社区  ›  Harsh Patel

在express中发送到客户端后无法设置标头

  •  0
  • Harsh Patel  · 技术社区  · 2 年前

    我在mongodb中成功注册了哪个插入记录,但当我尝试登录时,第“!user&res.status(401).json(“错误的用户名”);”行出现错误那个

    Cannot set headers after they are sent to the client
        at new NodeError (node:internal/errors:372:5)
        at ServerResponse.setHeader (node:_http_outgoing:576:11)
        at ServerResponse.header (/home/hahp1908/EShopAPI/node_modules/express/lib/response.js:794:10)
        at ServerResponse.send (/home/hahp1908/EShopAPI/node_modules/express/lib/response.js:174:12)
        at ServerResponse.json (/home/hahp1908/EShopAPI/node_modules/express/lib/response.js:278:15)
        at /home/hahp1908/EShopAPI/routes/auth.js:42:25
        at processTicksAndRejections (node:internal/process/task_queues:96:5) {
      code: 'ERR_HTTP_HEADERS_SENT'
    }
    
    const router = require('express').Router();
    const User = require("../models/User");
    const CrytoJS = require("crypto-js");
    
    router.post('/login', async (req, res) => {
        try{
            const user = await User.findOne(
                {
                    username: req.body.user_name
                }
            );
    
            !user && res.status(401).json("Wrong User Name");
    
            const hashedPassword = CryptoJS.AES.decrypt(
                user.password,
                process.env.PASS_SEC
            );
    
    
            const originalPassword = hashedPassword.toString(CryptoJS.enc.Utf8);
    
            const inputPassword = req.body.password;
            
            originalPassword != inputPassword && res.status(401).json("Wrong Password");
            res.status(200).json(user);
        }catch(err){
            res.status(500).json(err);
        }
    
    });
    module.exports = router
    
    1 回复  |  直到 2 年前
        1
  •  2
  •   ParadigmShift    2 年前

    调用res.status()时,需要结束函数的执行。json(),否则它将继续,您将再次设置res.status()。json()。这是导致错误的原因。

    修改为:

    const router = require('express').Router();
    const User = require("../models/User");
    const CrytoJS = require("crypto-js");
    
    router.post('/login', async (req, res) => {
        try{
            const user = await User.findOne(
                {
                    username: req.body.user_name
                }
            );
    
            if(!user) return res.status(401).json("Wrong User Name");
    
            const hashedPassword = CryptoJS.AES.decrypt(
                user.password,
                process.env.PASS_SEC
            );
    
    
            const originalPassword = hashedPassword.toString(CryptoJS.enc.Utf8);
    
            const inputPassword = req.body.password;
            
            if(originalPassword != inputPassword) return res.status(401).json("Wrong Password");
            return res.status(200).json(user);
        }catch(err){
            return res.status(500).json(err);
        }
    
    });
    module.exports = router