Node.js 发送到客户端节点后无法设置标头

Node.js 发送到客户端节点后无法设置标头,node.js,express,Node.js,Express,我正在编写一个react.js应用程序,就像一个博客,人们可以在这里发表文章,就像在媒体平台上一样。但是,当我的用户尝试登录他们的帐户时,我的express服务器返回一个错误,该错误表示应用程序无法在发送邮件后返回邮件头,但我不知道如何解决这个问题 我的代码: app.post("/users/login", (req, res) => { var ReqUsername = req.body.username; var ReqPassword =

我正在编写一个react.js应用程序,就像一个博客,人们可以在这里发表文章,就像在媒体平台上一样。但是,当我的用户尝试登录他们的帐户时,我的express服务器返回一个错误,该错误表示应用程序无法在发送邮件后返回邮件头,但我不知道如何解决这个问题

我的代码:

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)
          }
     })
})
app.post(“/users/login”,(req,res)=>{
var ReqUsername=req.body.username;
var ReqPassword=req.body.password;
userModel.find((错误,文档)=>{
如果(!err){
console.log(文档)
docs.forEach(用户=>{
console.log(用户)
var encryptedUsername=user.username;
var encryptedPassowrd=user.password;
var bytesundername=CryptoJS.AES.decrypt(encryptedUsername,);
var bytesPassword=CryptoJS.AES.decrypt(encryptedPassowrd,);
var decryptedUsername=byteUserName.toString(CryptoJS.enc.Utf8);
var decryptedPassword=bytesPassword.toString(CryptoJS.enc.Utf8);
if(decryptedUsername==ReqUsername){
if(decryptedPassword==ReqPassword){
res.json({
是的,
mensagem:“登录feito com successo”,
userId:user.userId
}).现状(202)
}
否则{
res.json({
sucesso:错,
策略:“赞成,确认为信息更新”
}).现状(404)
}
}
否则{
res.json({
sucesso:错,
策略:“赞成,确认为信息更新”
}).现状(404)
}
})
}
否则{
res.json(“检查用户数据库时出错”)。状态(500)
}
})
})
使用post登录url后,我总是收到以下错误:

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]: }
2021-02-20T14:16:38.847139+00:00应用程序[web.1]:错误[ERR\u HTTP\u HEADERS\u SENT]:发送到客户端后无法设置头
2021-02-20T14:16:38.847140+00:00应用程序[web.1]:位于ServerResponse.setHeader(_http_outgoing.js:558:11)
2021-02-20T14:16:38.847140+00:00应用程序[web.1]:位于ServerResponse.header(/app/node_modules/express/lib/response.js:771:10)
2021-02-20T14:16:38.847141+00:00app[web.1]:在ServerResponse.send(/app/node\u modules/express/lib/response.js:170:12)
2021-02-20T14:16:38.847141+00:00app[web.1]:位于ServerResponse.json(/app/node_modules/express/lib/response.js:267:15)
2021-02-20T14:16:38.847142+00:00应用程序[web.1]:at/app/main.js:79:35
2021-02-20T14:16:38.847142+00:00应用程序[web.1]:at Array.forEach()
2021-02-20T14:16:38.847142+00:00应用程序[web.1]:at/app/main.js:65:21
2021-02-20T14:16:38.847143+00:00应用程序[web.1]:at/app/node_modules/mongoose/lib/model.js:4857:16
2021-02-20T14:16:38.847143+00:00应用程序[web.1]:at/app/node_modules/mongoose/lib/model.js:4857:16
2021-02-20T14:16:38.847144+00:00应用程序[web.1]:at/app/node_modules/mongoose/lib/helpers/promiseOrCallback.js:24:16
2021-02-20T14:16:38.847144+00:00应用程序[web.1]:at/app/node_modules/mongoose/lib/model.js:4880:21
2021-02-20T14:16:38.847144+00:00应用程序[web.1]:at/app/node_modules/mongoose/lib/query.js:4399:11
2021-02-20T14:16:38.847145+00:00应用程序[web.1]:at/app/node_modules/kareem/index.js:136:16
2021-02-20T14:16:38.847145+00:00应用程序[web.1]:在处理时检查和拒绝(内部/process/task_queues.js:75:11)
2021-02-20T14:16:38.847146+00:00应用程序[web.1]:在以下位置的函数实例上发出“错误”事件:
2021-02-20T14:16:38.847146+00:00应用程序[web.1]:at/app/node_modules/mongoose/lib/model.js:4859:13
2021-02-20T14:16:38.847146+00:00应用程序[web.1]:at/app/node_modules/mongoose/lib/helpers/promiseOrCallback.js:24:16
2021-02-20T14:16:38.847147+00:00应用程序[web.1]:[…与原始堆栈跟踪匹配的行…]
2021-02-20T14:16:38.847147+00:00应用程序[web.1]:在处理时检查和拒绝(内部/处理/任务队列.js:75:11){
2021-02-20T14:16:38.847147+00:00应用程序[web.1]:代码:“ERR\u HTTP\u HEADERS\u SENT”
2021-02-20T14:16:38.847148+00:00应用程序[web.1]:}
我试着去掉一些反应,但效果不太好。
你们能帮我解决这个错误吗?

仅仅取消一些响应是不够的,每个请求只能有一个响应

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)
          }
     })
})

仅仅删除一些响应是不够的,每个请求只能有一个响应

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)
          }
     })
})

另外:您不应该加密密码,而是散列密码。应该没有办法恢复到用户输入的原始密码。另外:您不应该加密密码,而是哈希密码。应该没有办法回到用户输入的原始密码。非常感谢!非常感谢你!