通过 PM2 实现 Node.js 应用的线上调试和远程调试

前言

在开发 Node.js 应用时,我们经常需要进行线上调试和远程调试。如果我们使用传统的调试方式,需要在本地启动应用,然后通过调试工具连接到应用的进程,这种方式比较麻烦,尤其是在生产环境中,我们不可能随时随地都能访问服务器。

因此,我们需要一个更加方便的调试工具,可以在不停止应用的情况下进行调试,并且支持远程调试。这时,PM2 就是一个不错的选择。

PM2 简介

PM2 是一个基于 Node.js 的进程管理工具,可以帮助我们方便地管理 Node.js 应用的进程。它支持自动重启、负载均衡、日志管理等功能,而且还可以通过 API 和 Web UI 进行管理。

PM2 还提供了一个非常有用的功能:线上调试和远程调试。通过 PM2,我们可以在不停止应用的情况下进行调试,并且可以通过远程连接进行调试。

PM2 的线上调试和远程调试

线上调试

PM2 的线上调试功能是通过 V8 Inspector 实现的。V8 Inspector 是 Chrome DevTools 协议的一个实现,可以让我们通过 Chrome DevTools 进行调试。

要使用 PM2 的线上调试功能,我们需要在启动应用时添加 --inspect 参数,例如:

--- ----- ------ ------ ----- -- ---------

这样就会启动一个 V8 Inspector,我们可以通过 Chrome DevTools 进行调试。具体步骤如下:

  1. 在 Chrome 中输入 chrome://inspect,打开 Chrome DevTools。
  2. 点击“Open dedicated DevTools for Node”按钮。
  3. 在“Connection”面板中,点击“Configure”按钮,将“Host”设置为服务器的 IP 地址,将“Port”设置为应用的调试端口(默认为 9229)。
  4. 点击“Add connection”按钮,连接到应用的进程。
  5. 在“Sources”面板中,选择需要调试的文件,设置断点并进行调试。

远程调试

PM2 的远程调试功能是基于 SSH 实现的。我们可以通过 SSH 连接到远程服务器,并在服务器上进行调试。

要使用 PM2 的远程调试功能,我们需要在启动应用时添加 --inspect 参数,并且指定调试的 IP 地址和端口,例如:

--- ----- ------ ------ ----- -- ----------------------

这样就会将调试端口绑定到服务器的 IP 地址上,我们可以通过 SSH 连接到服务器,并使用 Chrome DevTools 进行调试。具体步骤如下:

  1. 在本地使用 SSH 连接到服务器,例如:
--- -----------
  1. 在服务器上启动应用,并将调试端口绑定到服务器的 IP 地址上,例如:
--- ----- ------ ------ ----- -- ----------------------
  1. 在本地使用 Chrome 打开 DevTools,并输入地址 chrome://inspect/#devices
  2. 点击“Configure”按钮,将“Host”设置为服务器的 IP 地址,将“Port”设置为应用的调试端口(默认为 9229)。
  3. 点击“Add connection”按钮,连接到应用的进程。
  4. 在“Sources”面板中,选择需要调试的文件,设置断点并进行调试。

示例代码

以下是一个简单的 Node.js 应用,使用 PM2 进行线上调试和远程调试:

----- ---- - ----------------

----- ------ - ----------------------- ---- -- -
  ------------------ - --------------- ------------ ---
  -------------- ----------
---

------------------- -- -- -
  ------------------- ------- -- -------------------------
---

我们可以使用以下命令启动应用:

--- ----- ------ ------ ----- -- ---------

或者:

--- ----- ------ ------ ----- -- ----------------------

然后,我们可以通过 Chrome DevTools 进行调试。如果是远程调试,我们还需要使用 SSH 连接到服务器。

总结

通过 PM2,我们可以方便地进行 Node.js 应用的线上调试和远程调试。这种调试方式比传统的调试方式更加方便和灵活,可以大大提高开发效率。希望本文能够对读者有所帮助。

来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/662b6712d3423812e48f4b42