已发送后无法设置 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})
            }
        }
      }
    )
    }

通过这样做,您只发送一次响应。