刷新时:发送到客户端后无法设置 headers
On Refresh: Cannot set headers after they are sent to the client
我正在尝试创建一个 API 端点来验证给定电子邮件和密码参数的用户以及 returns 对身份验证成功的 JSON 响应。但每次我调用同一个端点两次(通过刷新或从同一页面调用它两次),我得到:
Error [ERR_HTTP_HEADERS_SENT]: Cannot set headers after they are sent to the client.
我在网上查看并找到了几个解决方案来删除 res.send 冗余或使用 res.json。 None 其中有效果。
app.get('/api/login', (req, res) => {
let email = req.query.email;
let password = req.query.password;
con.connect(err => {
if (err) {
res.send({
success: false,
message: 'connection error'
})
}
con.query(`SELECT * FROM users WHERE email='${email}'`, (err) => {
if (result.length === 0) {
res.send({
success: false,
message: 'account does not exist'
})
} else {
if (bcrypt.compareSync(password, result[0].password)) {
res.redirect('/dashboard')
} else {
res.send({
success: false,
message: 'incorrect password'
})
}
}
});
})
});
我期待一个成功的回应,但我一直收到错误。任何和所有的帮助表示赞赏。谢谢。
该错误是由于尝试向特定请求发送多个响应造成的。在您为这个特定请求处理程序显示的代码中,我看到一个地方您可以这样做。
如果您遇到连接错误,那么您会对此进行测试并发送错误响应,但您不会 return 因此请求处理程序继续进入处理程序的其余部分,然后尝试发送另一个回应。
您需要添加 return
或 else
以便在出现连接错误时代码不会流入处理程序的其余部分。
app.get('/api/login', (req, res) => {
let email = req.query.email;
let password = req.query.password;
con.connect(err => {
if (err) {
res.send({
success: false,
message: 'connection error'
})
return;
}
con.query(`SELECT * FROM users WHERE email='${email}'`, (err) => {
if (result.length === 0) {
res.send({
success: false,
message: 'account does not exist'
})
} else {
if (bcrypt.compareSync(password, result[0].password)) {
res.redirect('/dashboard')
} else {
res.send({
success: false,
message: 'incorrect password'
})
}
}
});
})
我正在尝试创建一个 API 端点来验证给定电子邮件和密码参数的用户以及 returns 对身份验证成功的 JSON 响应。但每次我调用同一个端点两次(通过刷新或从同一页面调用它两次),我得到:
Error [ERR_HTTP_HEADERS_SENT]: Cannot set headers after they are sent to the client.
我在网上查看并找到了几个解决方案来删除 res.send 冗余或使用 res.json。 None 其中有效果。
app.get('/api/login', (req, res) => {
let email = req.query.email;
let password = req.query.password;
con.connect(err => {
if (err) {
res.send({
success: false,
message: 'connection error'
})
}
con.query(`SELECT * FROM users WHERE email='${email}'`, (err) => {
if (result.length === 0) {
res.send({
success: false,
message: 'account does not exist'
})
} else {
if (bcrypt.compareSync(password, result[0].password)) {
res.redirect('/dashboard')
} else {
res.send({
success: false,
message: 'incorrect password'
})
}
}
});
})
});
我期待一个成功的回应,但我一直收到错误。任何和所有的帮助表示赞赏。谢谢。
该错误是由于尝试向特定请求发送多个响应造成的。在您为这个特定请求处理程序显示的代码中,我看到一个地方您可以这样做。
如果您遇到连接错误,那么您会对此进行测试并发送错误响应,但您不会 return 因此请求处理程序继续进入处理程序的其余部分,然后尝试发送另一个回应。
您需要添加 return
或 else
以便在出现连接错误时代码不会流入处理程序的其余部分。
app.get('/api/login', (req, res) => {
let email = req.query.email;
let password = req.query.password;
con.connect(err => {
if (err) {
res.send({
success: false,
message: 'connection error'
})
return;
}
con.query(`SELECT * FROM users WHERE email='${email}'`, (err) => {
if (result.length === 0) {
res.send({
success: false,
message: 'account does not exist'
})
} else {
if (bcrypt.compareSync(password, result[0].password)) {
res.redirect('/dashboard')
} else {
res.send({
success: false,
message: 'incorrect password'
})
}
}
});
})