我如何像在 Express 中那样从 Opine 获取监听器端口?

How would I get the listener port from Opine as I would in Express?

我正在尝试使用我通常在 express 中使用的这段代码,但是在带有 Deno 的 Opine 中它不起作用,有什么方法可以从 Opine 上的侦听器函数获取端口?

let listener = app.listen(randomPort, function(){
    console.log('Listening on port ' + listener.address().port);
});

编辑:更新以将侦听器类型转换为 Deno 原生类型,因为它更准确。


目前,模块中定义的接口不会显示此内容,但经过一些控制台日志记录后,我看到当 运行 您的代码:

let listener = app.listen(randomPort, function(){
    console.log('Listening on port ' + listener.address().port);
});

listener.listener.addr 的值是这样的对象:

{ hostname: "0.0.0.0", port: 8000, transport: "tcp" }

不幸的是,由于未在类型中明确声明,如果您使用的是 TypeScript,则会出现 linting 错误。我们可以通过一些类型强制来解决这个问题:

// Update: using the correct Deno native type
const listenerAddr = listener.listener.addr as Deno.NetAddr;
const currentPort = listenerAddr.port

// Original: using hack-ish type casting
const currentPort: number = (listener.listener.addr as { port: number }).port