提问人:Alexander Mills 提问时间:10/30/2023 最后编辑:Alexander Mills 更新时间:10/30/2023 访问量:38
在什么情况下,res.status() 或 res.json() 会抛出/引发错误
Under what conditions might res.status() or res.json() throw/raise an error
问:
我有一个库的通用函数:
const sendResponse = (res: Response, errorTrace: InspectedError) => {
if (res.headersSent) {
log.warning('Headers already sent for response. Error:', errorTrace);
}
try {
res.status(500); // this one
} catch (err) {
log.error(err);
}
try {
res.json({ // this one
foo: 'bar'
});
} catch (err) {
log.error(err);
}
};
我很好奇 res.status() 和 res.json() 可能会引发哪些类型的错误 - 查看源代码是最好的选择还是有更好的方法来找出答案?
答:
1赞
jfriend00
10/30/2023
#1
我能想到的一些情况:
res
无效,并且不是对象或没有 OR 方法。status
json
res.json()
如果给它一个无效的参数,或者你给它一个包含循环引用(不能用 JSON 表示)的对象,则可能会失败。
评论
0赞
Alexander Mills
10/30/2023
状态码可以多次设置吗?先后?
0赞
Alexander Mills
10/30/2023
你的最后一个陈述是非常错误的 - 我想尝试设置状态码,这可能会失败,但我仍然想尝试用 .json() 发送响应
1赞
jfriend00
10/30/2023
@AlexanderMills - 是的,它可以。它所做的只是设置一个属性,以记住发送最终响应时的状态。您可以多次调用它,最后一个获胜。
1赞
jfriend00
10/30/2023
@AlexanderMills - 好吧,我没有意识到你正在尝试同时执行 AND .我会用一次尝试/捕捉来写它。如果失败,您会遇到更大的问题,因为显然无效,因此我认为没有必要将其分开。res.status(500)
res.json(...)
res.status(500).json(...)
res.status(500)
res
try/catch
2赞
jfriend00
10/30/2023
@AlexanderMills - 您知道您可以进入调试器并观察它的作用。这比阅读任何文档或在这里获得答案更具教育意义。这是真正知道它可能做什么的方法。而且,我发现这比尝试在 github 上查找相关的 nodejs/Express 源代码更容易。res.status(500)
评论