通过后处理程序发送数据,导致"Cannot set headers"



当在服务器上发送数据时,我的路由处理程序会发送一个错误,并且这个错误并不总是会发出。我已经开始学习node.js,我的postroute处理程序代码发布在下面。我在StackOverflow和git上读到了更多类似的问题,但没有合适的解决方案。

app/js

app.post("/sendJson", function (request, response) {
var jsonText = request.body.jsonList;
var arrayJson = JSON.parse(jsonText);
var accessToken = request.body.accessToken;
var description = request.body.description;
var deleteOptions = 0;
if (checkTokenExist(request.body.accessToken)) {
if (checkTokenExp(request.body.accessToken)) {
con.query(
"SELECT id_individual FROM user_token_individual WHERE user_access_token = ? ",
[accessToken],
function (err, resIdClient) {
if (err) {
console.log("error get id_individual " + err);
} else {
console.log("get id_individual " + resIdClient[0].id_individual);
con.query(
"INSERT INTO order_list_save(id_client,description,delete_options)VALUES(?,?,?)",
[resIdClient[0].id_individual, description, deleteOptions],
function (err, resInsertOrder) {
if (err) {
console.log("error insert new value " + err);
} else {
console.log("log insertId " + resInsertOrder.insertId);
var nowData = new Date();
arrayJson.forEach((element) => {
// console.log("element = " + element.service_id);
con.query(
"INSERT INTO order_table_save(data_order_save,id_order,quantity,price_number,id_service,service_name,service_unit,service_price_0,service_price_1,service_price_2,delete_options) VALUES(?,?,?,?,?,?,?,?,?,?,?)",
[
nowData,
resInsertOrder.insertId,
element.quantity,
element.price_number,
element.id_service,
element.service_name,
element.service_unit,
element.service_price_0,
element.service_price_1,
element.service_price_2,
0,
],
function (err, res) {
if (err) {
console.log(err);
} else {
response.json({
STATUS_CODES: 200,
});
response.end();
}
}
);
});
}
}
);
}
}
);
} else {
response.json({
STATUS_CODES: 401,
});
response.end();
}
} else {
response.json({
STATUS_CODES: 403,
});
response.end();
}
});

我的例外是"_http_outgoing";尽管我没有使用HTTP。

_http_outgoing.js:518
throw new ERR_HTTP_HEADERS_SENT('set');
^
Error [ERR_HTTP_HEADERS_SENT]: Cannot set headers after they are sent to the client
at ServerResponse.setHeader (_http_outgoing.js:518:11)
at ServerResponse.header (/home/odmin/Документы/project node/node_modules/express/lib/response.js:771:10)
at ServerResponse.send (/home/odmin/Документы/project node/node_modules/express/lib/response.js:170:12)
at ServerResponse.json (/home/odmin/Документы/project node/node_modules/express/lib/response.js:267:15)
at Query.onResult (/home/odmin/Документы/project node/serverWork.js:442:36)
at /home/odmin/Документы/project node/node_modules/mysql2/lib/commands/query.js:74:16
at processTicksAndRejections (internal/process/task_queues.js:79:11) {
code: 'ERR_HTTP_HEADERS_SENT'
}
[nodemon] app crashed - waiting for file changes before starting...

错误"错误:发送邮件头后无法设置邮件头">表示您已经处于Body或Finished状态,但某些函数试图设置标头或statusCode。当您看到此错误时,请尝试查找在某些正文已经写入后试图发送标头的任何内容。例如,查找意外调用两次的回调,或发送正文后发生的任何错误。

在您的代码中替换此

response.json({
STATUS_CODES: 401,
});
response.end();

到这个

res.status(200).send('some text');

相关内容

最新更新