gpt4 book ai didi

javascript - 避免 "Cannot set headers after they are sent"错误的最佳方法

转载 作者:行者123 更新时间:2023-12-02 14:32:50 27 4
gpt4 key购买 nike

我读过 S.O. 上对此问题的一些回复。 ( here ) 和 here ,我想知道这是否是最好的方法,或者是否有更普遍接受的最佳实践。因此,如果我有以下代码,例如:

app.delete('/something/:somethingId', function (req, res) {
for (var i = 0; i < thingList.length; i++) {
if (thingList[i].id === req.params.somethingId) {
thingList.splice(i, 1);
res.send(thingList[i]);
}
}
res.send("Nothing with that ID found");
});

此错误显示“设置后无法设置 header ”,我相信因为 res.send() 是异步的,并且此代码将尝试运行外部 res.send() 而内部的已经开始发送过程。但是,我无法将外部 res.send() 放入 else block 中,因为这会提前退出我的循环。添加一个 return 语句也是如此:

...
for (var i = 0; i < thingList.length; i++) {
if (thingList[i].id === req.params.somethingId) {
thingList.splice(i, 1);
return res.send(thingList[i]);
}
}
res.send("Nothing with that ID found");
...

或者,或者:

...
res.send(thingList[i]);
return;
...

我有最好的选择?我正在向一些人教授这一点,并希望在向他们提供可能被认为是 hacky 的解决方案之前确保我掌握了正确的方法。

最佳答案

在 Node 中返回回调是一种常见的约定——所以是的,这是一个选择。

另一个简单的选择是将匹配项存储在变量中(如果找到)并从循环中中断。

var match;
for (var i = 0; i < thingList.length; i++) {
if (thingList[i].id === req.params.somethingId) {
match = thingList[i];
break;
}
}
if(match !== undefined) {
res.send(match);
} else {
res.send("Nothing with that ID found");
}

关于javascript - 避免 "Cannot set headers after they are sent"错误的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37688492/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com