eggjs 执行 start 启动报错

版本

node v18.12.0

egg ^3.17.5

 

背景

先前执行 yarn start 可以正常启动,今日修改代码再次启动,发现报错,如下图(比较长没有截完)

 

排查与解决

1. 默认 node 版本16.18.0,vue3 项目要更高的版本,因此导致项目起不来还比较频繁,于是先忽视报错,无脑切 node 版本到 18.12.0,未果

  用到16.18.0的场景更多一些,所以一直没有改 nvm 的默认,要用其他版本的时候临时切换

2. 结合报错信息 ERROR 25500 [app_worker] server got error: bind EADDRINUSE null:7001, code: EADDRINUSE,得知地址被占用

3. 在 postman 访问 http://127.0.0.1:7001 的接口,发现可以正常返回,基本能确认就是上次运行的进程没有被终止

4. 执行 lsof -i:7001 查看占用端口的任务,有如下输出,得到 pid

5. 执行 kill 97630,将该进程杀死

6. 再次启动,成功

 

总结

egg 项目 start 命令作为部署命令,添加了 --deamon 参数,进程将变成守护进程在后台运行,直到系统关机

上次启动之后,没有执行 yarn stop 结束 egg 服务,仅关闭了编辑器,期间也没有关机,就遇到了这个问题

如何避免

本地运行时优选 yarn dev 命令,如果要执行 start 看部署的效果,可以:

1. 将 --deamon 参数去掉,这样关闭终端或关闭编辑器,将自动终止服务(不要提交,会影响部署)

2. 本地运行之后要记着执行 yarn stop 命令,手动终止(算是官方推荐,readme 里可以看到)

3. 本地运行过之后就不管它,今后默认是运行的,如果无法访问再启动(如果不是把本地当成服务器,就没必要,不推荐,且占用资源)

4. 按照提示,添加  --ignore-stderr 命令,忽视启动时的报错(终端会有报错信息,看着有点难受)

 

posted @ 2024-03-19 15:02  yuhui_yin  阅读(121)  评论(0编辑  收藏  举报