这两天折腾出了一些nodejs的调试方法,做个记录
断点调试
-
nodejs
官方指定的调试工具是chrome
,在使用命令行启动时,为其加上--inspect
选项,打开chrome
浏览器的开发者工具就可以看到调试工具的按钮,点击即可打开
node --inspect index.js
-
nodejs
的调试工具与浏览器控制台的功能相比较少,常用的console
和sources
的功能与浏览器上基本相似,
-
该工具中最常用的是断点调试,用法不再赘述
-
注意在一些立即执行的
nodejs
脚本中,当你打开调试工具时,代码已经执行完了,使用这条命令node --inspect-brk a.js
可以为你脚本的第一行打上断点,这时候就可以不紧不慢的打开调试工具了
请求分析
-
对于写
nodejs
服务端的我来说,调试工具中最重要的应该是Network
工具,但调试工具中并没有该工具,折腾之后选择了一个一个用nodejs
写的抓包工具 --- whistle -
该工具类似一个
nodejs
的全局服务器,安装也使用npm
:
npm i -g whistle
,安装完成后使用w2 start
启动服务
-
下载并信任证书(mac)
-
该工具能拿到我们请求的原因是我们将它作为了一个代理服务器,只有我们将请求交给它来代理,它才能进行请求的分析,转发,修改等操作,因此我们需要配置服务的代理
-
通过配置代理,我们可以将nodejs,浏览器,甚至其他应用的请求进行捕获,这里只介绍
nodejs
的代理配置 -
个人在
nodejs
请求使用的是request,在开发时使用该形式为其添加默认的代理即可
const request = require('request').defaults({'proxy':'http://127.0.0.1:8899'});
request.get('http://www.bing.com');
- 此时打开
whistle
控制台,已经可以看到被捕获的请求了
HTTPS
- 注意: 此时的代理只能处理
http
请求,当需要使用request
发送https
请求时,若还是这样写,会有这样的报错:
出现这个错误是因为对方网站的证书不正确导致的,个人理解是我们将https
请求交给了代理服务器,但请求本身会先校验对方网站的证书是否安全有效,默认会拒绝未认证的请求,此时我们可以配置rejectUnauthorized
来忽略这个规则
AXIOS 代理
- 如果使用
axios
做请求,配置全局代理的方式有所不同
const axios = require('axios').create({
proxy: {
host: '127.0.0.1',
port: 8899
}
});
网友评论