嘗試通過 Postman 進行發布請求時,我收到錯誤“無法在將標頭發送到客戶端后設定標頭”。我的請求包含以下正文:
{ "name": "新類別 1" }
我的代碼可能會幫助您理解這個問題:
function categoryValidator(category) {
return /^[a-zA-Z\s]*$/.test(category);}
router.post('/', function (req, res) {
let errors = [];
if (!categoryValidator(req.body.name)) {
errors.push("Naam mag alleen letters en spaties bevatten");
}
if (req.body.name.length < 2) {
errors.push("Naam moet een minimale lengte van 2 karakters hebbben");
}
console.log(errors.length);
if (errors.length) {
res.status(400).json({ errors });
}
let qry = `INSERT INTO "Categories" (name) VALUES(?)`;
let params = [req.body.name];
db.all(qry, params, (err) => {
if (err) {
res.status(400).json({ error: err.message });
return;
} else {
res.status(200);
res.json({
"message": "succes"
});
}
});
});
完整的錯誤資訊:
node:internal/errors:464
ErrorCaptureStackTrace(err);
^
Error [ERR_HTTP_HEADERS_SENT]: Cannot set headers after they are sent to the client
at new NodeError (node:internal/errors:371:5)
at ServerResponse.setHeader (node:_http_outgoing:576:11)
at ServerResponse.header (C:\Users\DaveP\Documents\Projecten\beddenshopv2\api\node_modules\express\lib\response.js:771:10)
at ServerResponse.send (C:\Users\DaveP\Documents\Projecten\beddenshopv2\api\node_modules\express\lib\response.js:170:12)
at ServerResponse.json (C:\Users\DaveP\Documents\Projecten\beddenshopv2\api\node_modules\express\lib\response.js:267:15)
at Statement.<anonymous> (C:\Users\DaveP\Documents\Projecten\beddenshopv2\api\routes\categories.js:62:17)
at Statement.replacement (C:\Users\DaveP\Documents\Projecten\beddenshopv2\api\node_modules\sqlite3\lib\trace.js:25:27) {
code: 'ERR_HTTP_HEADERS_SENT'
}
[nodemon] app crashed - waiting for file changes before starting...
uj5u.com熱心網友回復:
如果errors.length是真的,您將發送第一個回應。
if (errors.length) {
res.status(400).json({ errors });
return;
}
在db.all(qry, params, (err) => {您發送第二個回應時。這是不允許的并導致錯誤。
您可以在第一次回應后回傳:
function categoryValidator(category) {
return /^[a-zA-Z\s]*$/.test(category);
}
router.post('/', function (req, res) {
let errors = [];
if (!categoryValidator(req.body.name)) {
errors.push("Naam mag alleen letters en spaties bevatten");
}
if (req.body.name.length < 2) {
errors.push("Naam moet een minimale lengte van 2 karakters hebbben");
}
console.log(errors.length);
if (errors.length) {
res.status(400).json({ errors });
return;
}
let qry = `INSERT INTO "Categories" (name) VALUES(?)`;
let params = [req.body.name];
db.all(qry, params, (err) => {
if (err) {
res.status(400).json({ error: err.message });
return;
} else {
res.status(200);
res.json({
"message": "succes"
});
}
});
});
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/457743.html
標籤:javascript 节点.js sqlite 表示 邮差
上一篇:如何檢查目錄中是否存在sqlitedb檔案并使用python檢查表是否存在?
下一篇:當條目不完全匹配時如何連接表
