PM2启动Node.js应用后为什么访问不了接口?
我用PM2部署了一个Express写的API服务,本地运行没问题,但用PM2启动后浏览器和Postman都连不上接口,端口也没被占用,这是啥情况?
我执行的是 pm2 start app.js,app.js里监听的是3000端口。查了PM2日志也没报错,但就是请求超时。
下面是我的启动文件:
const express = require('express');
const app = express();
app.get('/api/test', (req, res) => {
res.json({ message: 'Hello from PM2!' });
});
app.listen(3000, () => {
console.log('Server running on port 3000');
});
app.listen没指定 host。本地直接跑 node 的时候可能没事,但 PM2 管理的时候有时候会出幺蛾子。你把启动代码改成这样试试:
显式指定
0.0.0.0监听所有网卡,不然有些环境默认绑定到其他地址去了。另外前端这块排查问题得讲究方法,别光看日志没报错就觉得没事。你执行几个命令确认一下:
pm2 list看进程状态是不是 online,如果是 errored 或者一直 restarting 那就是启动就挂了。pm2 logs app看实时日志,确认 "Server running on port 3000" 这句话有没有打印出来。netstat -tlnp | grep 3000或者lsof -i :3000看看 3000 端口到底有没有在监听。如果这命令没输出,说明根本没起来。还有个坑,如果你服务器上有防火墙或者云服务商的安全组,3000 端口没放开也会超时。不过你说本地浏览器也连不上,那应该不是这个问题。
改完代码记得重启:
pm2 restart app,或者直接pm2 delete app再重新 start。