CloudWays环境下NodeJS路由异常:仅根路径可用其他均404
CloudWays上Node.js Express路由仅根路径可访问,其余返回404的解决方法
核心问题分析
你的Express代码本身路由定义没有语法错误,出现非根路径404的原因大多和CloudWays的服务器配置有关,以下是针对性的解决步骤:
1. 修正Nginx反向代理配置
CloudWays默认的Nginx配置可能仅转发根路径请求到Node.js应用,需要修改配置让所有路径请求都被转发:
- 登录CloudWays控制面板,进入目标应用的管理页面
- 进入Application Settings > Custom Nginx Config
- 在Server Block区域添加/替换以下配置:
location / { proxy_pass http://127.0.0.1:PORT; # 将PORT替换为你的应用实际监听端口(可在CloudWays环境变量中查看) proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection 'upgrade'; proxy_set_header Host $host; proxy_cache_bypass $http_upgrade; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } - 保存配置后,在Services选项中重启Nginx服务
2. 确认应用监听正确端口
CloudWays会为Node.js应用分配专属端口,而非默认的3000:
- 进入应用的Application Settings > Environment Variables
- 检查是否存在
PORT变量,值为CloudWays分配的端口(通常为30000以上数值) - 若不存在,手动添加
PORT变量并设置对应端口值 - 你的代码中
const PORT = process.env.PORT || 3000;的写法是正确的,无需修改
3. 排查静态文件中间件冲突
如果你的应用使用了express.static中间件,需确保它放在所有路由定义之前,避免静态文件目录中存在与路由同名的文件(会优先返回静态文件导致路由404)。
4. 补充代码中缺失的变量
你的代码里storeId和accessToken未定义,虽然这不会导致404,但会让/produtos和/carrinho路由返回500错误,需补充定义:
const storeId = '你的Tiendanube商店ID'; const accessToken = '你的Tiendanube访问令牌';
验证修改
完成上述配置后,在CloudWays面板的Application选项中重启Node.js应用,然后测试所有路由:
https://你的域名/testehttps://你的域名/produtoshttps://你的域名/carrinho
内容的提问来源于stack exchange,提问作者João Paulo Moreira
相关产品推荐
相关产品推荐

