【问题标题】:Error [ERR_HTTP HEADERS_SENT]: Cannot set headers after they are sent to the client at nodejs错误 [ERR_HTTP HEADERS_SENT]:在 nodejs 将标头发送到客户端后无法设置标头
【发布时间】:2021-08-20 22:01:42
【问题描述】:

当我通过此 url 时,我需要让所有用户提交 ---> http://localhost:3080/api/msgs/email=k1199@gmail.com 但我只获得一个用户提交并收到此错误 [错误 [ERR_HTTP_HEADERS_SENT]: 发送到客户端后无法设置标头]

app.get('/api/msgs/:msg', (req, res) => {
  console.log('api/users called!!!!!!!')
  const databuffer = fs.readFileSync('notes1.json', 'utf8')
  const datajson = databuffer.toString()
  const dtafil = JSON.parse(datajson);
  id = req.url.split('/')[3]
  findname = req.url.split('/')[2]
  console.log(findname)
  let a = id;
  let h = 0;
  let k = [];
  let pre = [];
  for (let i = 0; i < a.length; i++) {
    if (a[i] == "=") h = i;
  }
  for (let j = 1; j < a.length - h; j++) {
    k.push(a[h + j]);
  }
  for (let s = 0; s <= a.length - (k.length + 1); s++) {
    pre.push(a[s]);
  }
  var idegenerator = k.join("");  
  var idegeneratorlk = pre.join("")
  console.log(idegeneratorlk, idegenerator)
  if (idegeneratorlk == 'email=') {
    for(i=0;i<=dtafil.length;i++){
      if(dtafil[i].namees === idegenerator){
        console.log(dtafil[i])
        res.json(dtafil[i]);
      }
    }
    // const user = dtafil.find((i) => i.namees === idegenerator)
    // res.json(user);
  } else if (idegeneratorlk == 'youtube=') {
    const user = dtafil.find((i) => i.youtube === idegenerator)
    res.json(user);
  }
  else {
    res.json('404 Not fount');
  }
});

【问题讨论】:

    标签: javascript node.js


    【解决方案1】:

    简单来说,ERR_HTTP_HEADERS_SENT 表示您针对同一请求多次发送响应。

    在你的代码中看到这个 for 循环:

    for(i=0;i<=dtafil.length;i++){
      if(dtafil[i].namees === idegenerator){
        console.log(dtafil[i])
        res.json(dtafil[i]);
      }
    }
    

    您在每次迭代中发送一​​个 JSON 响应,该响应将多次将相同的响应发送回客户端,而您不能。

    将数据保存在某个变量中,然后在 foo 循环之外立即发送响应,如下所示:

    if (idegeneratorlk == 'email=') {
        const response = dtafil.filter(data => {
            return data.namees === idegenerator;
        })
        res.json(response);
    }
    

    我刚刚编写了这个伪代码供您参考,您可能需要根据您的用例进行编辑。

    【讨论】:

    • 谢谢兄弟:- return dtafil.namees === idegenerator;零钱
    猜你喜欢
    • 1970-01-01
    • 2021-10-24
    • 2021-04-07
    • 1970-01-01
    • 1970-01-01
    • 2020-11-01
    • 1970-01-01
    • 2019-10-20
    • 1970-01-01
    相关资源
    最近更新 更多