node.js - 将标头发送到客户端后无法设置标头-NodeJs
问题描述
我正在编写一个 react.js 应用程序,比如一个人们可以在其中发布帖子的博客,就像在 Medium 平台中一样。但是,当我的用户尝试登录他们的帐户时,我的快速服务器返回一个错误,指出应用程序在发送标头后无法返回标头,但我不知道如何解决这个问题...
我的代码:
app.post("/users/login", (req, res) => {
var ReqUsername = req.body.username;
var ReqPassword = req.body.password;
userModel.find((err, docs) => {
if(!err) {
console.log(docs)
docs.forEach(user => {
console.log(user)
var encryptedUsername = user.username;
var encryptedPassowrd = user.password;
var bytesUsername = CryptoJS.AES.decrypt(encryptedUsername, <SECRET KEY>);
var bytesPassword = CryptoJS.AES.decrypt(encryptedPassowrd, <SECRET KEY>);
var decryptedUsername = bytesUsername.toString(CryptoJS.enc.Utf8);
var decryptedPassword = bytesPassword.toString(CryptoJS.enc.Utf8);
if(decryptedUsername == ReqUsername) {
if(decryptedPassword == ReqPassword) {
res.json({
sucesso: true,
mensagem:"Login feito com sucesso",
userId: user.userId
}).status(202)
}
else {
res.json({
sucesso: false,
mensagem:"Por favor, confira as suas informações e tente login novamente"
}).status(404)
}
}
else {
res.json({
sucesso: false,
mensagem:"Por favor, confira as suas informações e tente login novamente"
}).status(404)
}
})
}
else {
res.json("Error on check user database").status(500)
}
})
})
使用发布登录网址后,我总是收到此错误:
2021-02-20T14:16:38.847139+00:00 app[web.1]: Error [ERR_HTTP_HEADERS_SENT]: Cannot set headers after they are sent to the client
2021-02-20T14:16:38.847140+00:00 app[web.1]: at ServerResponse.setHeader (_http_outgoing.js:558:11)
2021-02-20T14:16:38.847140+00:00 app[web.1]: at ServerResponse.header (/app/node_modules/express/lib/response.js:771:10)
2021-02-20T14:16:38.847141+00:00 app[web.1]: at ServerResponse.send (/app/node_modules/express/lib/response.js:170:12)
2021-02-20T14:16:38.847141+00:00 app[web.1]: at ServerResponse.json (/app/node_modules/express/lib/response.js:267:15)
2021-02-20T14:16:38.847142+00:00 app[web.1]: at /app/main.js:79:35
2021-02-20T14:16:38.847142+00:00 app[web.1]: at Array.forEach (<anonymous>)
2021-02-20T14:16:38.847142+00:00 app[web.1]: at /app/main.js:65:21
2021-02-20T14:16:38.847143+00:00 app[web.1]: at /app/node_modules/mongoose/lib/model.js:4857:16
2021-02-20T14:16:38.847143+00:00 app[web.1]: at /app/node_modules/mongoose/lib/model.js:4857:16
2021-02-20T14:16:38.847144+00:00 app[web.1]: at /app/node_modules/mongoose/lib/helpers/promiseOrCallback.js:24:16
2021-02-20T14:16:38.847144+00:00 app[web.1]: at /app/node_modules/mongoose/lib/model.js:4880:21
2021-02-20T14:16:38.847144+00:00 app[web.1]: at /app/node_modules/mongoose/lib/query.js:4399:11
2021-02-20T14:16:38.847145+00:00 app[web.1]: at /app/node_modules/kareem/index.js:136:16
2021-02-20T14:16:38.847145+00:00 app[web.1]: at processTicksAndRejections (internal/process/task_queues.js:75:11)
2021-02-20T14:16:38.847146+00:00 app[web.1]: Emitted 'error' event on Function instance at:
2021-02-20T14:16:38.847146+00:00 app[web.1]: at /app/node_modules/mongoose/lib/model.js:4859:13
2021-02-20T14:16:38.847146+00:00 app[web.1]: at /app/node_modules/mongoose/lib/helpers/promiseOrCallback.js:24:16
2021-02-20T14:16:38.847147+00:00 app[web.1]: [... lines matching original stack trace ...]
2021-02-20T14:16:38.847147+00:00 app[web.1]: at processTicksAndRejections (internal/process/task_queues.js:75:11) {
2021-02-20T14:16:38.847147+00:00 app[web.1]: code: 'ERR_HTTP_HEADERS_SENT'
2021-02-20T14:16:38.847148+00:00 app[web.1]: }
我试图取消一些响应,但它无法正常工作。你们能帮我解决这个错误吗?
解决方案
仅此还不够take off some responses
,您必须对每个请求只有一个响应。
app.post("/users/login", (req, res) => {
var ReqUsername = req.body.username;
var ReqPassword = req.body.password;
userModel.find((err, docs) => {
if(!err) {
const user = docs.find(user => {
var bytesUsername = CryptoJS.AES.decrypt(user.username, SECRET KEY);
var decryptedUsername = bytesUsername.toString(CryptoJS.enc.Utf8);
return decryptedUsername === ReqUsername;
});
if(!user) {
res.json({
sucesso: false,
mensagem:"Por favor, confira as suas informações e tente login novamente"
}).status(404)
} else {
var bytesPassword = CryptoJS.AES.decrypt(user.password, SECRET KEY);
var decryptedUsername = bytesUsername.toString(CryptoJS.enc.Utf8);
if(decryptedPassword == ReqPassword) {
res.json({
sucesso: true,
mensagem:"Login feito com sucesso",
userId: user.userId
}).status(202)
} else {
res.json({
sucesso: false,
mensagem:"Por favor, confira as suas informações e tente login novamente"
}).status(404)
}
}
} else {
res.json("Error on check user database").status(500)
}
})
})
推荐阅读
- jython - 将外部 Sikuli 类导入 1 个 Sikuli 脚本
- sql - 如何计算查询中的剩余值
- bash - 如何在使用 Plink 执行的 bash 文件中接受用户输入?
- django - 如何基于PGsql在Django中迁移模型
- javascript - 在用户触摸屏幕之前,Safari 不允许应用程序专注于输入
- wordpress - 如何根据选择的页面模板显示特定的古腾堡块
- python - 如何使用 pymupdf 从 pdf 文件中提取表格
- java - 使用 SAX 解析器访问节点内的节点
- c++ - cmake/make (OBJECT) 依赖问题——当标头改变时不重建
- php - 功能 - 删除 3 个 lasts 元素