当前位置: 首页 > 知识库问答 >
问题:

错误[ERR_HTTP_HEADERS_SENT]:在Node.js项目中,当头被发送到客户端错误后,无法设置头

狄雅珺
2023-03-14

这是我的代码

/*
*
*
*       Complete the API routing below
*
*
*/

'use strict';
const {v4 : uuidv4} = require('uuid')
function Update(n){
  let filter={$set:{}};
  console.log("update"+JSON.stringify(n))
if(n.issue_title!=""){filter.$set.issue_title=n.issue_title}
if(n.issue_text!=""){filter.$set.issue_text=n.issue_text}
if(n.created_by!=""){filter.$set.created_by=n.created_by}
filter.$set.updated_on=new Date;
if(n.assigned_to!=""){filter.$set.assigned_to=n.assigned_to}
if(n.status_text!=""){filter.$set.status_text=n.status_text}
if(n.open==="false"){filter.$set.open=false}
console.log("filter"+JSON.stringify(filter))
return filter;
}
const checkResult = (want, reference) => {
  // creating a new temp objecct OUTSIDE of the for loop
  let temp = {}
  
  // Array of the reference keys
  const keys = Object.keys(reference)

  // looping over keys in reference
  for (let i = 0; i < keys.length; i++) {
  
    // The current key
    const key = keys[i]
    
    // if the key is included in the 'want' list
    if (key in want) {

      // set a property in the temp object, but with a different value
      temp[key] = 1
    }
  }

  // when we are done, return the object
  console.log(JSON.stringify(temp))
  return temp
}
const Datas = require('../Models/datas');
module.exports = function (app) {

  app.route('/api/issues/:project')
  
    .get(function (req, res){
      console.log(JSON.stringify(req.query))
        if(Object.keys(req.query).length === 0){Datas.find().then((data,err)=>{
           console.log("correct")
          res.json(data)
        })}
        else {
          let find={
             "issue_title": 0,
             "issue_text": 0,
             "created_on":0,
             "updated_on":0,
             "created_by":0,
             "assigned_to":0,
             "open":0,
             "status_text":0,
             "__v":0
          }
          let afterFind=checkResult(find,req.query)
          console.log("got here"+afterFind)
          Datas.find(req.query).select(afterFind).exec()
          .then((data,err)=>{
               if(err){
                 res.send(err)
               }
               res.json(data)
            }
          )
        }
    })
    
    .post(function (req, res){
      let main=req.body;
      console.log(main)
      if(req.body.issue_title==""||req.body.issue_text==""||req.body.created_by==""){
       res.json({ error: 'required field(s) missing' })
      }
   else {
     const id1 = uuidv4()
      let savedata=new Datas({
        "_id":id1,
        "issue_title":req.body.issue_title,
        "issue_text":req.body.issue_text,
        "created_on":new Date(),
        "updated_on":new Date(),
        "created_by":req.body.created_by,
        "assigned_to":req.body.assigned_to,
        "open":true,
        "status_text":req.body.status_text
      })
      savedata.save((err,data)=>{
        if(err){res.json({error:"error has been occurred"})}
        else {
        res.json({
        "_id":id1,
        "issue_title":req.body.issue_title,
        "issue_text":req.body.issue_text,
        "created_on":new Date(),
        "updated_on":new Date(),
        "created_by":req.body.created_by,
        "assigned_to":req.body.assigned_to,
        "open":true,
        "status_text":req.body.status_text
      })};
      })
    }
    })
    
    .put( function (req, res){
    console.log(req.body)
    let obj=req.body

    if(!obj.hasOwnProperty(_id)){
       res.json({ error: 'missing _id' })
    }
    else if(obj.issue_title==""||obj.issue_text==""||obj.created_by==""||obj.assigned_to==""||obj.status_text==""){
      res.json({ error: 'no update field(s) sent', '_id': obj._id })
    }
      Datas.findOneAndUpdate({"_id":req.body._id}, Update(req.body),{new:true}).then((data,err)=>{
        if(err){res.json({ error: 'could not update', '_id': obj._id })}
        console.log(data)
         res.json( { result: 'successfully updated', '_id': data._id })
         })
    })
    
    .delete(function (req, res){
  console.log(req.body)
  let obj=req.body
     if(!obj.hasOwnProperty("_id")){
       res.json({ error: 'missing _id' })
    }
  Datas.findByIdAndRemove(req.body,(err,data)=>{
    if(err){res.json({ error: 'could not delete', '_id': obj._id })}
    res.json({ result: 'successfully deleted', '_id': obj._id })
  })
    });
    
};

有人知道错误是什么吗

错误[ERR_HTTP_HEADERS_SENT]:在serverresponse.json(/home/runner/boilerplate-project-issuetracker/node_modules/express/lib/response.json(/home/runner/boilerplate-project-issuetracker/node_modules/express/lib/response.js)处发送到html" target="_blank">客户端后,无法设置头文件。S:267:15)在/home/runner/boilerplate-project-issuetracker/routes/api.js:146:17在/home/runner/boilerplate-project-issuetracker/node_modules/mongoose/lib/model.js:4850:16在/home/runner/boilerplate-project-node_modules/mongoose/lib/model.js:4850:16在issueTracker/node_modules/mongoose/lib/model.js:4873:21 at/home/runner/boilerplate-project-issueTracker/node_modules/mongoose/lib/query.js:4389:18 at model.query.query._findandmodify(/home/runner/boilerplate-project-issueTracker/node_modules/mongoose/lib/query.js:3460:12)at model.query。(/home/runner/boilerplate-project-issuetracker/node_modules/mongoose/lib/query.js:3421:8)在model.query._wrappedthunk[as_findoneandremove](/home/runner/boilerplate-project-issuetracker/node_modules/mongoose/lib/helpers/query/wrapthunk.js:16:8)在在/home/runner/boilerplate-project-issueTracker/node_modules/mongoose/lib/model.js:4852:13在/home/runner/boilerplate-project-issueTracker/node_modules/mongoose/lib/helpers/promiseorcallback.js:16:11[...lines匹配原始堆栈跟踪...]在processTicksAndRejections(internal/process/task_queues.js:79:11){代码ELIFECYCLE npm错误!错误1 npm错误!fcc-issue-tracker@1.0.0 start:节点server.jsnpm错误!退出状态1 npm错误!npm错误!在fcc-issution-tracker@1.0.0启动脚本中失败。npm错误!这可能不是NPM的问题。上面可能有额外的日志记录输出。

npm错误!此运行的完整日志可以在:npm err!/home/runner/.np

实际上上面的代码部分是我唯一编辑的东西,其他部分都很好,都调试得很好

共有1个答案

孟晋
2023-03-14
 let afterFind = checkResult(find, req.query);
    console.log('got here' + afterFind);
    models.Users.find(req.query)
      .select(afterFind)
      .exec()
      .then((data, err) => {
        if (err) {
          res.send(err); // YOU NEED TO RETURN HERE AS return res.send(err)
        }
        res.json(data);
      });

您需要返回响应,这样它就不会到达下一个响应。您还需要在其他几个地方返回响应。

如果你不知道该在哪里继续返回。最好在每个res.send/res.json中保留返回

 类似资料:
  • 所以我看到了一篇很棒的帖子“错误:发送到客户端后无法设置标题,但仍然不明白我的“标题”部分有什么问题,因为当我将它从注释掉的

  • 我正在执行简单的 API 提取,但收到以下错误: ,我不确定发生这种情况的原因: 代码在下面,还提供了错误的打印屏幕。我不确定这是否与nodejs的异步行为有关: 到目前为止,我解决这个错误的方法是: 我使用了这个来源,它对错误类型的广泛解释解释了问题所在。然而,理解发生了什么是没有用的。 我还发现这很有用,这也很有用,但最后一个特别是一个缺失语句< code>return的代码错误。我的错误似乎

  • 我得到状态代码201,但是当我尝试重定向到approval_url时,我得到 错误[ERR_HTTP_HEADERS_SENT]:无法在发送到客户端后设置标头 当我手动单击approval_url时,我尝试不重定向,所有工作都很好。 服务器启动!{id:'payid-l3azrlq4la763246g079113e',意图:'sale',状态:'created',付款人:{payment_meth

  • 问题内容: 我对Node.js相当陌生,遇到了一些问题。 我正在使用Node.js 4.10和Express 2.4.3。 当我尝试访问http://127.0.0.1:8888/auth/facebook时,我将重定向到http://127.0.0.1:8888/auth/facebook_callback。 然后,我收到以下错误: 以下是我的代码: 我可以知道我的代码有什么问题吗? 问题答案:

  • 我在NodeJS中使用Passport.js、Express和Mongoose时遇到了这个奇怪的问题。基本上,即使我只发送了一个头,我还是得到一个错误,说“不能在头被发送到客户端后设置它们”。 我读过其他帖子并尝试过,但没有一个有效。 应用程序。get-res.send与return res.send之间有什么区别吗 错误[ERR_HTTP_HEADERS_SENT]:将标头发送到客户端后,无法设

  • 问题内容: 我对Node.js相当陌生,遇到了一些问题。 我正在使用Node.js 4.10和Express 2.4.3。 当我尝试访问http://127.0.0.1:8888/auth/facebook时,我将重定向至http://127.0.0.1:8888/auth/facebook_callback。 然后,我收到以下错误: 以下是我的代码: 我可以知道我的代码有什么问题吗? 问题答案: