You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

监听端口后服务器无法启动,重启电脑后故障求助

问题排查与解决

核心问题分析

从nodemon日志clean exit来看,进程无报错就静默退出,大概率是未捕获的Promise拒绝(比如数据库连接失败)或代码语法/逻辑错误导致进程终止。结合你的代码,重点排查以下几点:

1. 缺失全局错误捕获

你的自执行异步函数未包裹try/catch,一旦内部Promise(比如createConnection)拒绝,进程会直接静默退出,无法看到具体错误信息。

2. User.findOne语法错误

代码中这一行存在明显逻辑错误:

const user = await User.findOne({ uid: payload.userId }.uid);

错误地访问了对象的uid属性,导致findOne接收的是单个值而非查询条件对象,运行时会抛出异常终止进程。

3. 数据库连接失败

重启电脑后,PostgreSQL服务可能未自动启动,或TypeORM的连接配置(地址、凭证等)出现问题,createConnection失败后直接终止进程。

4. 依赖版本兼容性冲突

apollo-server-express@3.10.2与type-graphql@1.1.1版本跨度较大,可能存在兼容性问题,导致启动失败。


分步解决

第一步:添加全局错误捕获,定位具体错误

修改index.ts的自执行函数,包裹try/catch捕获所有启动错误:

(async () => {
  try {
    const app = express();
    // 原代码所有内容...
    
    app.listen(4000, () => {
      console.log("express server started");
    });
  } catch (err) {
    console.error("服务器启动失败详情:", err);
  }
})();

重新运行npm run dev,控制台会输出具体错误信息,帮助精准定位问题。

第二步:修复User.findOne语法错误

将错误查询代码修改为正确格式:

// 正确的查询条件对象写法
const user = await User.findOne({ uid: payload.userId });

// 若使用TypeORM 0.3.x+版本,也可使用findOneBy:
// const user = await User.findOneBy({ uid: payload.userId });

第三步:检查数据库连接状态

  • 确认PostgreSQL服务已启动:在系统服务列表中找到PostgreSQL,确保其处于运行状态。
  • 检查TypeORM配置:确认项目根目录存在ormconfig.json/ormconfig.ts,配置中的数据库地址、端口、用户名、密码、库名与实际环境一致。
  • 验证.env文件:确认.env文件存在,且数据库相关环境变量(若TypeORM依赖)配置正确。

第四步:调整依赖版本(可选)

若错误提示与依赖兼容有关,尝试将type-graphql升级到与Apollo Server 3兼容的版本(如^1.2.0),或降低apollo-server-express到^2.x版本。


验证

修改完成后重新执行npm run dev,若启动成功,控制台会输出express server started;若仍有错误,根据try/catch捕获的信息进一步排查即可。

内容的提问来源于stack exchange,提问作者Kartik Fulara

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 14:25:24