已发送后无法设置 Header // node express
Cannot set Header after already being sent // node express
设置完成后提示无法设置 headers。
我对 URL 上发送的 put 方法的代码拦截,然后检查是否缺少 id,之后检查是否没有输入的字段未定义,然后执行 try-catch 方法,在该方法中它更新给定的 id。如果 id 不正确,则它会返回一个错误。
我的代码是:
.put(async function (req, res){
console.log(req.body._id + " is id.")
const {_id, issue_title, issue_text, created_by, assigned_to, status_text, open} = req.body;
if(!_id){
res.json({error: "missing _id"})
}
const fields = {issue_title, issue_text, created_by, assigned_to, status_text, open}
const checkAllUndefined = Object.values(fields).every(val => (val == undefined || val == '')? true: false)
if(checkAllUndefined){
res.json({ error: 'no update field(s) sent', _id})
} else{
try{
await db.findOneAndUpdate({_id: new mongodb.ObjectID(_id)}, {$set:
{issue_title,issue_text,created_by, assigned_to, status_text, open,
updated_on: new Date()}}, {
new: true,
omitUndefined: true
})
res.json({ result: 'successfully updated', _id})
}catch(err){
res.json({ error: 'could not update', _id})
}
}
})
如果 _id 未定义,您的第一个 If 语句将返回响应!
if(!_id){
res.json({error: "missing _id"})
}
发送此响应后,您的下一个 if 块或其 else 块将被执行
这导致发送另一个不可能或不允许的响应!,你必须像这样嵌套 if else 块
put(async function (req, res) {
console.log(req.body._id + " is id.")
const {_id, issue_title, issue_text, created_by, assigned_to, status_text, open} = req.body;
if (!_id) {
res.json({error: "missing _id"})
} else {
if (checkAllUndefined) {
res.json({error: 'no update field(s) sent', _id})
} else {
try {
await db.findOneAndUpdate({_id: new mongodb.ObjectID(_id)}, {
$set:
{
issue_title, issue_text, created_by, assigned_to, status_text, open,
updated_on: new Date()
}
}, {
new: true,
omitUndefined: true
})
res.json({result: 'successfully updated', _id})
} catch (err) {
res.json({error: 'could not update', _id})
}
}
}
)
}
通过这样做,您只发送一次响应。
设置完成后提示无法设置 headers。 我对 URL 上发送的 put 方法的代码拦截,然后检查是否缺少 id,之后检查是否没有输入的字段未定义,然后执行 try-catch 方法,在该方法中它更新给定的 id。如果 id 不正确,则它会返回一个错误。 我的代码是:
.put(async function (req, res){
console.log(req.body._id + " is id.")
const {_id, issue_title, issue_text, created_by, assigned_to, status_text, open} = req.body;
if(!_id){
res.json({error: "missing _id"})
}
const fields = {issue_title, issue_text, created_by, assigned_to, status_text, open}
const checkAllUndefined = Object.values(fields).every(val => (val == undefined || val == '')? true: false)
if(checkAllUndefined){
res.json({ error: 'no update field(s) sent', _id})
} else{
try{
await db.findOneAndUpdate({_id: new mongodb.ObjectID(_id)}, {$set:
{issue_title,issue_text,created_by, assigned_to, status_text, open,
updated_on: new Date()}}, {
new: true,
omitUndefined: true
})
res.json({ result: 'successfully updated', _id})
}catch(err){
res.json({ error: 'could not update', _id})
}
}
})
如果 _id 未定义,您的第一个 If 语句将返回响应!
if(!_id){
res.json({error: "missing _id"})
}
发送此响应后,您的下一个 if 块或其 else 块将被执行 这导致发送另一个不可能或不允许的响应!,你必须像这样嵌套 if else 块
put(async function (req, res) { console.log(req.body._id + " is id.") const {_id, issue_title, issue_text, created_by, assigned_to, status_text, open} = req.body; if (!_id) { res.json({error: "missing _id"}) } else { if (checkAllUndefined) { res.json({error: 'no update field(s) sent', _id}) } else { try { await db.findOneAndUpdate({_id: new mongodb.ObjectID(_id)}, { $set: { issue_title, issue_text, created_by, assigned_to, status_text, open, updated_on: new Date() } }, { new: true, omitUndefined: true }) res.json({result: 'successfully updated', _id}) } catch (err) { res.json({error: 'could not update', _id}) } } } ) }
通过这样做,您只发送一次响应。