如何使用 Express .listen() 处理错误(在 Typescript 中)?
Posted
技术标签:
【中文标题】如何使用 Express .listen() 处理错误(在 Typescript 中)?【英文标题】:How to handle errors with Express .listen() (in Typescript)? 【发布时间】:2019-10-10 23:29:05 【问题描述】:目前正在将我的项目转换为使用 Typescript。我之前在 Node 中启动 Express 的工作代码如下所示:
server.listen(port, (error) =>
if (error) throw error;
console.info(`Ready on port $port`);
);
现在我得到一个 Typescript 错误:
Argument of type '(error: any) => void' is not assignable to parameter of type '() => void'.
我尝试为参数分配一个类型,例如error: Error
或error: any
,但这并不能解决问题。我在这里做错了什么?
另外,由于我是 Typescript 的新手,虽然我已经找到了大量学习 Typescript 的资源,但我有什么地方可以了解如何在更特定于 npm 包的场景中处理 Typescript?
【问题讨论】:
throw
不是函数。
@JackBashford 我的错,错字。我已将问题中的代码修复为我之前工作过的代码。虽然仍然有 Typescript 错误。
您确定server.listen
s callback
有签名(err)=>
吗?
【参考方案1】:
我今天也遇到了。这是对类型定义的(重大)更改:
https://github.com/DefinitelyTyped/DefinitelyTyped/pull/47063
该 PR 的作者建议处理侦听错误的正确方法是注册一个侦听器(如上面 Jonas 所链接):
https://nodejs.org/api/net.html#net_server_listen
听起来类型定义是个谎言,而且该参数并不真正存在,因此从您的应用程序中删除它的使用应该是无操作的。这就是我正在做的事情。 (此外,我对 EADDRINUSE 使我的应用程序崩溃之类的错误感到满意,因此我不会添加任何新的错误处理)
【讨论】:
【参考方案2】:没有error
¹。
server.listen(port, () =>
console.info(`Ready on port $port`);
);
要侦听错误,请使用server.listen(port).on("error", /*...*/)
²。
¹:文档非常嵌套:
Express docs 说,那个
此方法与 Node 的 http.Server.listen() 相同。
现在these docs 说,htt.Server.listen
等于 Net.server.listen
。
然后that 说:
这个函数是异步的。当服务器开始监听时,将发出“监听”事件。最后一个参数回调将被添加为 'listening' 事件的监听器。
现在"listening" event 似乎没有引发任何错误。
²:这是我在Express issuetracker 中找到的推荐方式。
请注意,在大多数情况下您不想处理错误,如果服务器崩溃,最好的选择很可能是重新启动整个过程。
【讨论】:
我也是这么想的,因为错误说它需要()=>
,但我们给出的是(err)=>
谢谢!!!!你救了我的心!!!以上是关于如何使用 Express .listen() 处理错误(在 Typescript 中)?的主要内容,如果未能解决你的问题,请参考以下文章