Node.js 错误\u HTTP\u头\u已发送ExpressJS

Node.js 错误\u HTTP\u头\u已发送ExpressJS,node.js,express,http-headers,Node.js,Express,Http Headers,我正在创建一个API,它首先检查一个表中的test\u set\u id,然后如果找到,从另一个表中获取更多数据 如果给定的test\u set\u id不存在/不正确,则会发送一个错误,并且在找不到创建者id的测试时也会发送一个错误 因此,我有以下错误。我得到的回答是正确的,正如我所希望的,但为了更好地理解内部工作,我想了解错误以及如何避免它 到目前为止,我的理解是,我没有正确处理承诺功能,缺少了一些东西 我不认为我的实现是错误的,不管怎样,如果有人能帮助我,我都会很高兴 错误如下: Erro

我正在创建一个API,它首先检查一个表中的
test\u set\u id
,然后如果找到,从另一个表中获取更多数据

如果给定的test\u set\u id不存在/不正确,则会发送一个错误,并且在找不到创建者id的测试时也会发送一个错误

因此,我有以下错误。我得到的回答是正确的,正如我所希望的,但为了更好地理解内部工作,我想了解错误以及如何避免它

到目前为止,我的理解是,我没有正确处理承诺功能,缺少了一些东西

我不认为我的实现是错误的,不管怎样,如果有人能帮助我,我都会很高兴

错误如下:

Error [ERR_HTTP_HEADERS_SENT]: Cannot set headers after they are sent to the client
    at ServerResponse.setHeader (_http_outgoing.js:482:11)
    at ServerResponse.header (/home/siddhant/Projects/CreateTestAPI/create-test-api/node_modules/express/lib/response.js:767:10)
    at ServerResponse.send (/home/siddhant/Projects/CreateTestAPI/create-test-api/node_modules/express/lib/response.js:170:12)
    at connection.query.then.then.then (/home/siddhant/Projects/CreateTestAPI/create-test-api/routes/create-test.js:228:19)
    at processTicksAndRejections (internal/process/task_queues.js:86:5)
GET /admin/test-overview 200 2.635 ms - 72
API代码如下所示

   const corp_id = request.body.creator_id;
   const academic_id = request.body.academic_id;
   var connection = new promise_database.Database();
   var result = {};

   const statement_1 = `SELECT id, academic_id, candidate_id, created_at, question_id
   FROM m_edu.custom_test_history_students WHERE academic_id = '${academic_id}'```

   const statement_2 = `SELECT test_set_id
   FROM m_edu.test_created_history WHERE test_creator_details_id = '${corp_id}'`

   connection.query(statement_2)
      .then(rows => {
         if (Object.keys(rows).length === 0) {
            result.status = "Not OK";
            result.message = "No Tests has been created till now";
            result.code = 142706
            response.send(result)
         } else {
            count = 0
            for (i = 0; i < Object.keys(rows).length; i++) {
               if (rows[i].test_set_id == academic_id) {
                  count++
               }
               if (count > 0) {
                  return connection.query(statement_1);
               } else {
                  result.status = "No Such Test";
                  result.message = "Please check again for test_set_id"
                  response.send(result)
               }
            }

         }
      }, error => {
         console.log(error);
         result.status = "Server Error";
         result.message = "Please Contact Server Admin";
         result.code = 142708;
         response.send(result);
      }).then(rows => {
         console.log(rows)
      }, error => {

      }).then(() => {
         response.send("Done")
      }).catch (error => {
         console.log(error) //line 228
      })
});
const corp\u id=request.body.creator\u id;
const academical_id=request.body.academical_id;
var connection=new promise_database.database();
var result={};
const statement_1=`选择id、学术id、候选人id、创建时间、问题id
来自m_edu.custom_test_history_学生,其中学术id=“${学术id}”```
const语句_2=`SELECT test\u set\u id
从m_edu.test_创建的_历史,其中test_创建者_详细信息_id=“${corp_id}”`
连接查询(语句2)
。然后(行=>{
if(Object.keys(rows.length==0){
result.status=“不正常”;
result.message=“目前尚未创建任何测试”;
result.code=142706
响应。发送(结果)
}否则{
计数=0
对于(i=0;i0){
返回connection.query(语句_1);
}否则{
result.status=“无此类测试”;
result.message=“请再次检查测试设置\u id”
响应。发送(结果)
}
}
}
},错误=>{
console.log(错误);
result.status=“服务器错误”;
result.message=“请与服务器管理员联系”;
结果代码=142708;
响应。发送(结果);
})。然后(行=>{
console.log(行)
},错误=>{
}).然后(()=>{
回复。发送(“完成”)
}).catch(错误=>{
console.log(错误)//第228行
})
});

如果test\u set\u id匹配,它将完美地工作。

如果您没有匹配行,您将尝试发送2个响应。if station
response.send(result)
中的第一个,最后一个
中的第二个,然后
response.send(“Done”)
如果您没有匹配行,则尝试发送两个响应。if station
response.send(result)
中的第一个,最后一个
中的第二个,然后
response.send(“Done”)
谢谢。当时的额外费用造成了问题。谢谢。当时的额外费用造成了问题。