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

为什么它只返回模拟数据库中的第一个id?

李建中
2023-03-14

简而言之,我试图创建一个简单的api,它将返回具有匹配ID的用户。我使用postman向使用Node.js和Express创建的本地主机发送请求。当我请求第一个用户时,它工作得很好,但当请求“john”时,它会抛出一个错误。我正在编写一门udemy课程的代码,但除了材料过时之外,我不知道问题是什么。错误为“错误[ERR_HTTP_HEADERS_SEND]:将标头发送到客户端后无法设置标头”

null

 users: [
    {
      id: "123",
      name: "Sally",
      email: "sally@gmail.com",
      password: "bananas",
      entries: 0,
      joined: new Date(),
    },
    {
      id: "124",
      name: "John",
      email: "john@gmail.com",
      password: "apples",
      entries: 0,
      joined: new Date(),
    },
  ],
};
 
 app.get("/profile/:id", (req, res) => {
  const { id } = req.params;
  let found = false;
  database.users.forEach((user) => {
    if (user.id === id) {
      found = true;
      return res.json(user);
    }
    if (!found) {
      res.json("User not found");
    }
  });
});

null

共有1个答案

钱均
2023-03-14

从MDN Web文档:

除了引发异常之外,没有任何方法可以停止或中断foreach()循环。如果需要这样的行为,foreach()方法是错误的工具。

提前终止可通过以下方式完成:

  • 简单循环
  • 用于的...循环的
  • [Array.Prototype.every()][every]
  • [Array.Prototype.some()][some]
  • [Array.Prototype.find()][find]
  • [Array.Prototype.findIndex()][findIndex]

这意味着您的循环将运行所有元素,并实际上多次调用res.json,导致err_http_headers_send错误。有很多方法可以解决这个问题,这里有一个例子:

app.get("/profile/:id", (req, res) => {
    const {id} = req.params;      
    for (const user of database.users) {
        if (user.id === id) {
            return res.json(user);
        }
    }
    res.json("User not found");
});

 类似资料:
  • 输出8 好吧,我给出了 neg=-1,low=0、b=10、键盘=2、驱动器=3 的值,我的数组是 [3 1] [5 2 8] 我已经添加了键盘和驱动器值,将其存储在max数组中。当我将这些最大数组值与b if(max[i]进行比较时

  • 很抱歉问了一个关于已经讨论过很多次的论点的非常基本的问题,我就是想不出答案。我试着在论坛上搜索已经在主题上提出的问题,但没有找到确切的答案(或者不理解)。 当以不同顺序调用时,为什么此函数会打印两次从i到10的数字?它不应该按同样的顺序打印出来吗?我一直听说递归就是这样工作的:每个函数在其代码中调用另一个相同的函数,只应用于较小的域,直到满足结束条件为止。此时,它应该返回(回溯)到原始函数;这就是

  • 这是我要测试的类 这是测试类 当我做这个测试的时候 我创建这些类时参考了其他已有的代码,来自不同的地方,并且没有真正理解如何进行注释(部分原因是时间不够),所以如果有人能告诉我,不仅是如何修复,而且还有为什么我错了,我会非常感激的! 编辑: 我做了@Nikolas Charalambidis建议的更改(谢谢!),所以我的类现在看起来与 通过稍加搜索,从这个SO答案中,我觉得我不应该@autowir

  • 问:为什么我只收到以下使用 YouTube Data V3 API 执行的操作中的 1 个视频?我尝试从中提取视频的示例频道(https://www.youtube.com/user/JayLenosGarage/videos)有多个视频。 我正在尝试从特定频道的Youtube数据API v3中获取所有视频及其关联的ID。让我们使用示例通道JayLenosGarage。 所以关注YouTube上的

  • 我的申请中有一个奇怪的现象。 我在一个本地无状态EJB中,希望调用另一个本地无状态EJB,这将导致以下异常: 当我研究这个问题的时候,我发现通常原因是在尝试调用第二个(内部)EJB之前,第一个EJB内部的代码中存在运行时异常。 显然,即使捕获并处理了运行时异常,它的存在也足以将事务标记为回滚。到目前为止,这是可以理解的。 问题是我不知道相关代码中有任何运行时异常。但我能够找到导致这种情况的一行代码

  • 初学者问题,很抱歉,如果这不是一个合适的地方,请尝试学习在中逻辑是如何工作的,我无法理解这一点 我希望它会说“是的!”如果是A、A、D或D,而是z,但出于某种原因,它会说“是的!”无论第一个符号是什么,都会断开,并且只检查第二个符号是否为z。