概要
主要通过实验性模块inspector实现手动开启关闭,修改调试接口以实现远程调试
说明
我们知道通过启动命令可以设置调试开启和关闭
node --inspect=191.168.1.15:9229 app.js
但是通常我们不会专门准备好一个调试接口针对每个进程,但是一旦遇到很难复现的问题就很抓瞎了。好在实现性模块inspector开通了设置调试接口的一些信息。
我们可以通过类似下面脚本实现手动动态配置
const SECRET = '45u90rjigjrihfngihghkbgh+jghg/af';
// 手动开启调试接口-通过http协议开启
function inspector(req, resp, queryInfoDic) {
if (resp.finished) {
return;
}
// 参数校验权限
if (!queryInfoDic.params.secret || queryInfoDic.params.secret.replace(/ /g, '+') !== SECRET) {
resp.end('1');
return;
}
const inspector = require('inspector');
// 端口,地址,是否只是关闭
let {port, host, close} = queryInfoDic.params;
inspector.close();
// 只关闭
if (close) {
return resp.end(inspector.url());
}
// 分配端口
if (port) {
port = Number.parseInt(port);
}
if (!Number.isSafeInteger(port)) {
port = 9229;
}
let args = [port];
// 地址
if (host) { // 一般是目标服务器的本地IP
args.push(host);
}
inspector.open(...args);
resp.end(inspector.url());
}
只需把此请求挂在http/ws服务器route上即可。
补充
云服务器一般调试的安全性起见我们都会选择host是内网IP,这就遭遇到远程调试不便的问题。
策略1 花钱
申请一台云服务器系统是windows系统,内网互通直接解决一切问题。
策略2 费事
做nginx代理转发对一个外网IP(23.434.355.34)的某个端口8800,做ws转ws到调试服务器内网IP+调试端口。
这样只是会每次都需要运维小弟弟给你临时开放端口。