gpt4 book ai didi

javascript - Node.js 应用程序 : throw new Error ('Can\' t set headers after they are sent. ')

转载 作者:太空宇宙 更新时间:2023-11-04 03:29:24 25 4
gpt4 key购买 nike

我有以下代码:

router.get('/:widget', function(req, res, next) {
var widget = req.params.widget;
if ( ! validate(widget) ) {
res.status(400).send("Invalid widget");
return;
}

redis.hget("e:" + widget, 'ccid', function (e, d) {
if (e){
res.status(500).send("Database query failed");
return;
}
if (d) {
res.status(200).send("Resource found");
return;
} else {
res.status(400).send("Unknown widget");
return;
}
});

res.status(200).send("why are you here?");
return;
});

我的印象是,当代码点击“返回”时......它会退出该函数。但似乎正在发生的事情是,当逻辑达到:

  res.status(400).send("Unknown widget");
return;

路径,它仍然命中

        res.status(200).send("why are you here?");
return;

还有。我以为它会退出该方法。显然,我错了......因为我收到了上述错误消息。当我在 redis.hget 调用后删除 res.send() 和 return() 时,错误消失。

在每个 res.status().send() 之后我应该使用什么来代替“return”语句?

最佳答案

“redis.hget”是异步调用。由于“redis.hget”是一个异步调用,因此“router.get”函数会继续执行到最后,遇到“res.status(200).send(“why are you here?”)”,从而将响应发送给客户端。

现在,在下一个事件循环中,异步函数“redis.hget”被执行,在从Redis服务器获取响应后,再次调用“res.status(400).send...”。但由于响应之前已经发送给客户端,因此您会收到错误“发送后无法设置 header ”

关于javascript - Node.js 应用程序 : throw new Error ('Can\' t set headers after they are sent. '),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40243111/

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