问题描述参见:ECONNREFUSED 127.0.0.1:53233 when running "serve-ssr" from @nguniversal/builders #1848。
该issue至今仍是open状态,但近日在解决NestJS
和Angular Universal
结合的问题时,却无意中找到了出现的原因、复现步骤,以及解决方法。
先附上原先出现问题的代码:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
const port = env.server.port || 4000;
app().then((server) => {
server.listen(port, () => {
console.log(`[${moment().format('YYYY-MM-DD HH:mm:ss')}] ifuyun.com listening on http://localhost:${port}`);
});
});
这是一段再正常不过的代码,传入配置的端口,如果不存在则取默认值4000,怎么可能出问题呢?甚至,在看了源码,并debug后,依然一头雾水。😥
就这么delay了好久,直到前几天……
在新建一个项目后,发现其并没有出现同样的问题,便去对比了代码,发现问题出在port的使用上。正常的那份代码如下:
- 1
- 2
- 3
await app.listen(process.env.PORT, env.server.host, () => {
logger.info(`Server listening on: ${env.server.host}:${process.env.PORT}`);
});
在这个版本中,实际上,process.env.PORT
的值就是前一份代码中报错的那个端口(随机的),因此,也就不存在ECONNREFUSED
的问题了。
但,怪异的是,第一种方式在生产环境(也即build后)中却是正常的。继续排查……