javascript - 发送请求时出现 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'});
}
}
解决方案
您正在写入 内部的响应.map
,因此它会多次写入标头,并且您只能执行一次。
快速浏览表明您可能想要执行以下操作:
pool.query('SELECT * FROM users WHERE username=:username', { replacements: { username }})
但我不确定您使用的是什么 sql 驱动程序或它如何处理绑定参数,或者您的用户名列上是否有唯一索引等。
推荐阅读
- r - 以前安装的版本中的 R 包在哪里?
- mysql - 如何将我的 React Native 应用程序连接到 MySQL 服务器?
- python - 矩阵中的for循环
- scala - 如何测试返回 Dataset[String, T] 的函数
- javascript - 为什么调用 fetch、axios、ajax 或 promise 时函数返回未定义
- python - Locust 负载测试脚本出错 - 连接中止。',RemoteDisconnected
- primary-key - 雪花批量加载的 AUTOINCREMENT 主键
- java - Quadtrees 应该只在孩子中存储点吗?
- mysql - 我可以使用什么子查询来根据字符串过滤数据?
- python - 我的 Pytorch CNN 计算但不显示训练结果