生产模式下Fastify启动后立即停止 托管React构建产物部署故障求助
问题原因
你的代码和运行日志存在以下几处错误直接导致服务启动后立刻退出:
- 日志打印端口为4000,代码硬编码打印端口为5000,说明运行的代码和你提供的代码版本不一致,或者
PORT变量被意外覆盖 fastify-static的prefix配置不符合Fastify规则,你写的"/*/"是错误写法,路由注册阶段就会抛出异常,且你没有捕获异步异常,进程触发未捕获异常后直接终止- 你将
app.listen放在GraphQL服务的启动回调中,若GraphQL服务启动失败,整个进程会直接崩溃退出,无错误日志输出
修复方案
- 修正静态资源托管配置,同时添加React单页应用的兜底路由:
app.register(fastifyStatic, { root: path.join(__dirname, "build"), prefix: "/", // 前缀直接配置为根路径即可,不需要加通配符 prefixAvoidTrailingSlash: true, }); // 兜底所有未匹配路由返回React入口文件,适配客户端路由 app.get('/*', (req, reply) => { reply.sendFile('index.html'); });
- 给所有异步逻辑添加异常捕获,避免进程无日志直接退出:
server.start() .then(() => { app.register(server.createHandler({ path: "/graphql", cors: corsOptions })); return app.listen(PORT, "0.0.0.0"); }) .then(() => { console.log(`Server is ready at port ${PORT}`); // 直接使用变量打印端口,避免硬编码和实际运行值不一致 }) .catch(err => { console.error('服务启动失败:', err); process.exit(1); });
- 确认运行环境中
PORT变量的赋值是否符合预期,排查端口冲突问题。
内容的提问来源于stack exchange,提问作者Mj Ebrahimzadeh
相关产品推荐
相关产品推荐

