简而言之,我试图创建一个简单的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
从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");
});