当前位置: 首页 > 后端技术 > Node.js

获取NodeJS开发和调试

时间:2023-04-03 21:21:27 Node.js

代码调试有时是一项具有挑战性的任务。如果手边有一个调试工具,往往可以达到事半功倍的效果。得益于这些年的飞速发展,NodeJS生态中已经出现了多种调试工具。今年我们会分享几个常用的调试工具。在NodeJS代码调试中,通常有两种调试方式,一种是打印日志,一种是直接调试代码。现在让我们分别解释一下。日志可以帮助我们记录程序运行过程中的一些状态和错误信息。通过日志,我们可以很快的找到有问题的代码。例如,借助异常日志,我们可以快速定位到具体的代码行。调试模块debug是许多NodeJS包和框架使用的日志记录工具。这个包的好处是可以细粒度的控制以环境变量的形式打印哪些日志。例如,在下面的代码中,假设我们先发送一些请求,然后接收响应数据。//index.jsconstdebugHttpIncoming=require('debug')('http:incoming')constdebugHttpOutgoing=require('debug')('http:outgoing')letoutgoingRequest={url:'https://google.com'}//发送一些requestdebugHttpOutgoing('发送请求到%s',outgoingRequest.url)letincomingRequest={body:'{"status":"ok"}'}//servingsomerequestdebugHttpOutgoing('gotJSONbody%s',incomingRequest.body)当我们启动程序时如下方式:DEBUG=http:incoming,http:outgoingnodeindex.js日志显示如下:同时debug模块也支持*通配符,我们可以通过DEBUG=http:*nodeindex.js得到上面相同的日志输出。记录到文件通常,我们需要持久化应用程序运行的日志,最简单的方法就是记录到文件中。pino是一个高性能的日志记录模块,类似于bunyan,但性能更好。以下是几种日志模块的性能数据对比:benchWinston*10000:2226.117msbenchBunyan*10000:1355.229msbenchDebug*10000:445.291msbenchLogLevel*10000:322.181msbenchBole*10000:291.727msbenchPino*10000:269.109msbenchPinoExtreme*10000:102.239mspino使用非常简单:constpino=require('pino')()pino.info('hellopino')pino.info('theansweris%d',42)pino.error(newError('anerror'))aboveThecodeandthelogoutputareasfollows:{"level":30,"time":1632626946507,"pid":77749,"hostname":"everfind-MacBook-Pro.local","msg":"hellopino"}{"level":30,"time":1632626946508,"pid":77749,"hostname":"everfind-MacBook-Pro.local","msg":"theansweris42"}{"level":50,"time":1632626946508,"pid":77749,"hostname":"everfind-MacBook-Pro.local","stack":"Error:anerror\natObject.(/Users/everfind/workspace/ztest/test/pino.js:5:12)\natModule._compile(internal/modules/cjs/loader.js:1072:14)\natObject.Module._extensions..js(internal/modules/cjs/loader.js:1101:10)\natModule.load(internal/modules/cjs/loader.js:937:32)\n在Function.Module._load(internal/modules/cjs/loader.js:778:12)\n在Function.executeUserEntryPoint[asrunMain](internal/modules/run_main.js:76:12)\natinternal/main/run_main_module.js:17:47","type":"Error","msg":"anerror"}DebugNodeJSbuilt-inDebugging模块NodeJS提供了内置的调试模块,使用起来非常简单直接,缺点是没有UI页面,纯命令行操作$nodedebugindex.js我们通过debugger语句设置断点constexpress=require('express');constapp=express();app.get('/',(req,res)=>{debugger;res.send('ok');});app.listen(3000);内置调试??模块支持如下命令:cont或c——继续执行next或n——进入下一步或s——进入函数out或o——退出函数repl——刷新上下文信息V8Inspector我们也可以使用Chrome的V8InspectorDevTools调试NodeJS代码$node--inspectindex.js上面的命令通过--inspect参数告诉NodeJS启用V8Inspector。然后我们在Chrome中输入chrome://inspect/,然后找到我们要调试的那个文件,就可以使用ChromeDevTools调试代码了。有时,我们需要从代码的入口点开始调试,我们可以使用--inspect-brk从起点开始调试。$node--inspect-brkindex.jsVSCode最后介绍一下VSCode调试代码的方法,也是使用频率最高的。通常我们可以直接通过菜单开始调试,就像上面的演示效果一样。如果我们需要一些高级设置,VSCode允许我们配置一个.vscode/launch.json文件来告诉VSCode如何启动调试器。默认配置项如下:{"version":"0.2.0","configurations":[{"type":"node","request":"launch","name":"LaunchProgram","program":"${workspaceRoot}/index.js"},{"type":"node","request":"attach","name":"AttachtoPort","address":"localhost","port":5858}]}各个配置项的作用和具体用法可以查看VSCode文档。另外,如果我们在VSCode自带的命令行中通过node--inspect启动程序,VSCode的调试功能会自动开启。常见的面试知识点、技术方案、教程,可以扫描二维码关注公众号“何里千寻”获取,也可以来这里https://everfind.github.io。