PM2启动Node.js应用后为什么访问不了接口?

爱学习的雨欣 阅读 15

我用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');
});
我来解答 赞 2 收藏
二维码
手机扫码查看
1 条解答
法霞(打工版)
看了你的代码,问题大概率出在 app.listen 没指定 host。本地直接跑 node 的时候可能没事,但 PM2 管理的时候有时候会出幺蛾子。

你把启动代码改成这样试试:

app.listen(3000, '0.0.0.0', () => {
console.log('Server running on port 3000');
});


显式指定 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。
点赞
2026-02-28 21:16