javascript - 尝试使用expressJs获取特定用户时出错

标签 javascript node.js express

我正在尝试从 Json 文件获取 expressJs 中的特定用户

这是我遇到的错误。

UnhandledPromiseRejectionWarning: Error [ERR_HTTP_HEADERS_SENT]: Cannot set headers after they are sent to the client

这是我用来获取特定用户的代码:

router.get("/:id", async (req, res) => {
  const { id } = req.params;
  for (let i = 0; i < usersData.length; i++) {
    if (usersData[i].id == id) {
      console.log(usersData[i]);
      await res.send(usersData[i]);
    } else {
      res.json({ error: "Error" });
    }
  }
});

最佳答案

看起来您的循环逻辑需要修改,以避免向客户端发送多个响应。使用您当前的代码,当 usersData 数组中存在多个项目时,就会发生这种情况,看到 res.send()res.json()userData 的每次迭代中调用。

一种可能是按如下方式修改您的代码(假设您只想返回与请求 ID 匹配的第一个用户(如果有)):

router.get("/:id", async (req, res) => {
  const { id } = req.params;
  
  // Find user by id
  const user = usersData.find(data => data.id === id)
  
  // If user found, send to client or send error json
  if(user) {
    res.send(user);  
  }
  else {
    res.json({ error: "Error" });
  }
  
});

关于javascript - 尝试使用expressJs获取特定用户时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59433535/

相关文章:

javascript - socket.io 如何从客户端获取参数?

javascript - 按最大值获取数组索引?

node.js - Nodejs redis 查询数据

javascript - 使用nodejs上传大文件

javascript - Service-Worker addEventListener,事件参数如何使用?

json - 如何使用 'loadtest' nodejs 模块加载测试 post API?

rest - 将 Aurelia 与后端 API 连接

javascript - Express JS,使用 HTTPS 时不会加载页面

javascript - 多次克隆对象并在 jQuery 中附加克隆

javascript - 向 Google Calendar API 发出服务器到服务器的请求