Node.js 调试 的方式有什么,怎样调式方便?
Admin 2022-01-05 群英技术资讯 392 次浏览
Node.js 调试 的方式有什么,怎样调式方便?对于Node 代码调式,很多朋友只会用console.log 这种带有侵入性的方法,但是其实Node.js 也可以做到跟浏览器调试一样的方便的,对此本文给大家分享两种常见的 Node.js 的方式,需要的朋友可以参考了解看看。
本文环境:
mac Chrome 94.0.4606.81 node v12.12.0 vscode Version: 1.61.1
本文示例采用的是之前探索洋葱模型的,仅有一个文件,就是根目录下 index.js
,如下:
const Koa = require('koa'); const app = new Koa(); console.log('test') // 中间件1 app.use((ctx, next) => { console.log(1); next(); console.log(2); }); // 中间件 2 app.use((ctx, next) => { console.log(3); next(); console.log(4); }); app.listen(9000, () => { console.log(`Server is starting`); });
v8 Inspector Protocol 是 nodejs v6.3 新加入的调试协议,通过 websocket与 Client/IDE 交互,同时基于 Chrome/Chromium 浏览器的 devtools 提供了图形化的调试界面。
我们进入项目根目录,执行(留意这个 8888 端口,后面会用到):
node --inspect=8888 index.js
结果如下:
结果出来一个链接——ws://127.0.0.1:8888/5f5c59fc-d42b-4ab0-be15-6feb1a05ed2d
。这个链接是 Node.js 和 Chrome 之前通信的 websocket 地址,通过 websocket 通信,我们可以在 Chrome 中实时看到 Node.js 的结果。
第一种方式(自己尝试无效)
打开 http://localhost:8888/json/list
,其中 8888
是上面 --inspect
的参数。
[ { "description": "node.js instance", "devtoolsFrontendUrl": "chrome-devtools:
//devtools/bundled/js_app.html?experiments=true&v8only=true&ws=localhost:8888/5f5c59fc-d42b-4ab0-be15-6feb1a05ed2d", "devtoolsFrontendUrlCompat": "chrome-devtools:
//devtools/bundled/inspector.html?experiments=true&v8only=true&ws=localhost:8888/5f5c59fc-d42b-4ab0-be15-6feb1a05ed2d", "faviconUrl": "https://nodejs.org/static/images/favicons/favicon.ico", "id": "5f5c59fc-d42b-4ab0-be15-6feb1a05ed2d", "title": "index.js", "type": "node", "url": "file:///Users/gpingfeng/Documents/Personal/Test/test-onion/index.js", "webSocketDebuggerUrl": "ws://localhost:8888/5f5c59fc-d42b-4ab0-be15-6feb1a05ed2d" } ]
很多资料说,可以通过 devtoolsFrontendUrl
就可以直接访问到,但尝试了一下,并没有成功。【可能跟我的环境有关】
第二种方式
查了一下资料,在 stackoverflow 找到对应的方案,如下:
devtools://devtools/bundled/inspector.html?experiments=true&ws=127.0.0.1:8888/5f5c59fc-d42b-4ab0-be15-6feb1a05ed2d
其中 devtools://devtools/bundled/inspector.html?experiments=true
是固定的,ws
参数对应的就是 websocket 地址。
可以看到界面如下:
第三种方式
Chrome 浏览器打开 HTTP 监听接口页面,打开 dev tool,执行完 node --inspect=8888 index.js
后可以看到这个图标,点击一下:
就可以出现跟浏览器一样的调试页面,比如 Sources Panel查看脚本、Profile Panel 监测性能等。
另外,可以访问访问 chrome://inspect/#devices
,可以看到当前浏览器监听的所有 inspect。
除了浏览器之外,各大主流的 IDE 都支持 Node.js 的调试,本文以 Vscode 为例。
打开调试页面,给我们 Node 项目添加一个 launch 配置:
选择 Node.js
这样就会在项目根目录生成对应的文件 .vscode/launch.json
(当然你也可以手动创建),其中 program
指的就是文件入口,${workspaceFolder}
指的是根目录。
{ // Use IntelliSense to learn about possible attributes. // Hover to view descriptions of existing attributes. // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 "version": "0.2.0", "configurations": [ { "type": "pwa-node", "request": "launch", "name": "Launch Program", "skipFiles": [ "<node_internals>/**" ], "program": "${workspaceFolder}/index.js" } ] }
按 F5、或者点击如下按钮:
结果:
可以看到,在左侧可以显示当前作用域的值,调用堆栈等信息,右上方亦可逐步调试函数、重启等功能,非常强大。
通过 Attach to Node Process Action 的方式,我们可以直接调试运行中的 Node.js 进程。
比如我们先启动项目——npm run start
。
然后 command + shift + p
(window Ctrl+Shift+p
),输入 Attach to Node Process Action
,回车,然后选中运行中进程再回车,就可以跟上面配置一样调试代码了。
本文总结了两种常见的调试 Node.js 的方式。第一种 Node.js 通过 websocket 的方式将信息传递给 Chrome 浏览器,我们直接在 Chrome 中进行调试。第二种就是通过 Vscode Launch Configuration,自定义配置的方式进行调试。通过 Attach to Node Process Action 的方式,可以便捷的调试正在运行的 Node.js 代码,而不需要配置。
关于Node.js 调试 的方式就介绍到这,希望大家阅读完这篇文章能有所收获,上述介绍的两种调试大家也可以试试看看,如果还想要了解更多Node.js 调试 的内容,大家可以关注其它的相关文章。
文本转载自PHP中文网
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:mmqy2019@163.com进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。
猜你喜欢
这篇文章主要给大家分享JS实现sleep睡眠函数的内容,我们知道JavaScript因为是单线程运行,所以没有内置的sleep函数,因此这些朋友就不太了解JavaScript sleep睡眠函数的实现,对此下面小编就给大家来介绍一下。
目录1 计算属性实现模糊查询2 watch 监听实现模糊查询3 通过按钮点击实现模糊查询1 计算属性实现模糊查询vue 中通过计算属性实现模糊查询,创建 html 文件,代码直接放入即可。这里自己导入 vue,我是导入本地已经下载好的。script src=./lib/vue-2.6.12.js/script演示:打开
这篇文章主要为大家详细介绍了vue3实现CSS无限无缝滚动效果,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
本篇文章给大家带来了关于javascript的相关知识,主要介绍了JavaScript事件循环同步任务与异步任务,文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的朋友可以参考一下。
目录前言一、作用域(scope)1、作用域的分类二、预编译三、作用域链前言我们需要先知道的是引擎,引擎的工作简单粗暴,就是负责javascript从头到尾代码的执行。引擎的一个好朋友是编译器,主要负责代码的分析和编译等;引擎的另一个好朋友就是今天的主角--作用域。那么作用域用来干什么呢?作用域链跟作用域又有什么关系呢?
成为群英会员,开启智能安全云计算之旅
立即注册Copyright © QY Network Company Ltd. All Rights Reserved. 2003-2020 群英 版权所有
增值电信经营许可证 : B1.B2-20140078 粤ICP备09006778号 域名注册商资质 粤 D3.1-20240008