cPanel部署Node.js仅默认路由可用,其他路由报500错误
解决cPanel部署Node.js后仅根路由可用的问题
以下是针对你遇到的仅根路由正常、其他路由返回500错误的排查步骤:
1. 核对cPanel Node.js应用配置
- 登录cPanel,找到Node.js管理器,检查你的应用:
- 应用根目录:必须指向你的项目根文件夹(比如代码放在
public_html/my-node-app,就填这个路径) - 启动文件:确认是你项目的入口文件(比如
app.js或server.js,要和实际文件名一致) - 修改后记得点击Restart App生效
- 应用根目录:必须指向你的项目根文件夹(比如代码放在
2. 检查路由挂载与中间件
- 确保所有路由都在Express实例初始化、必要中间件(如
express.json()、cors)之后挂载,比如:const express = require('express'); const app = express(); // 先加载中间件 app.use(express.json()); app.use(cors()); // 再挂载路由 app.get('/', (req, res) => res.send('Home')); app.get('/check', (req, res) => res.send('Check')); const authRouter = require('./routes/auth'); app.use('/api/auth', authRouter); - 临时添加全局错误处理中间件,捕获具体错误信息(方便排查):
// 放在所有路由之后 app.use((err, req, res, next) => { console.error(err.stack); res.status(500).send(`具体错误:${err.message}`); }); - 检查带
/api前缀的路由是否正确使用express.Router():
比如routes/auth.js里应该写:
不要在路由文件里重复写const router = require('express').Router(); router.get('/', (req, res) => { /* 逻辑 */ }); // 对应/api/auth路径 module.exports = router;/api/auth前缀
3. 修正文件权限
- 进入cPanel的文件管理器,找到你的项目文件夹:
- 文件夹权限设为
755,文件权限设为644(选中文件/文件夹后点击顶部的权限修改) - 重点检查
routes目录下的文件,确保Node.js进程能读取到这些文件
- 文件夹权限设为
4. 验证Passenger与.htaccess配置
- 如果你的应用在子目录,检查根目录的
.htaccess文件(cPanel Node.js工具会自动生成,但若手动修改过可能出错),正确配置示例:PassengerNodejs /home/你的用户名/nodejs/bin/node PassengerAppRoot /home/你的用户名/public_html/你的项目文件夹 PassengerStartupFile app.js PassengerAppType node - 若存在自定义的URL重写规则,确保没有和你的Node.js路由冲突
5. 重新安装依赖
- 打开cPanel的终端,切换到项目根目录,运行:
npm install - 不要直接上传本地的
node_modules文件夹,不同环境的依赖可能存在兼容问题 - 确认
package.json里有正确的start脚本:"scripts": { "start": "node app.js" }
内容的提问来源于stack exchange,提问作者Ali Usama
相关产品推荐
相关产品推荐

