Node.js 错误\u HTTP\u头\u已发送ExpressJS
我正在创建一个API,它首先检查一个表中的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
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 stationresponse.send(result)
中的第一个,最后一个中的第二个,然后response.send(“Done”)
谢谢。当时的额外费用造成了问题。谢谢。当时的额外费用造成了问题。