首页 > 解决方案 > 发送请求时出现 Express 标头错误

问题描述

请求此方法时出现错误“[ERR_HTTP_HEADERS_SENT] 将标头发送到客户端后无法设置”。我刚刚熟悉了 express 并且很可能成功地做了一些事情。告诉我是什么导致了错误

const generateAccessToken = (id,username) => {
    const payload = {
        id,
        username
    }
    return jwt.sign(payload, secret, {expiresIn: "24h"});
}



async login(req, res) {
        try {
            const {username, password} = req.body;
            pool.query('SELECT * FROM users', (error, result) => {
                if(error) return console.log(error);

                result.map(item => {

                    if (item.username !== username) {
                        return res.status(400).json({message: 'Error username'});
                    }

                    const validPassword = bcrypt.compareSync(password, item.password);

                     if (!validPassword) {
                        return res.status(400).json({message: 'Error password'});
                    }

                    const token = generateAccessToken(item.id,item.username);
                    return res.json({token});

                });
            });
        } catch (e) {
            console.log(e);
            res.status(400).json({message: 'Login error'});
        }
    }

标签: javascriptnode.jsexpress

解决方案


您正在写入 内部的响应.map,因此它会多次写入标头,并且您只能执行一次。

快速浏览表明您可能想要执行以下操作:

pool.query('SELECT * FROM users WHERE username=:username', { replacements: { username }})

但我不确定您使用的是什么 sql 驱动程序或它如何处理绑定参数,或者您的用户名列上是否有唯一索引等。


推荐阅读