Node.js 项目调试指南

Node.js 项目调试指南

🧭 一、调试工具和方式总览

方式难度场景说明
console.log 调试简单问题定位最常见,但效率低
debug 模块★★模块化输出日志支持命名空间的调试日志
VSCode 断点调试★★★跟踪函数调用、变量状态推荐使用
node inspect / ndb★★★★CLI 下高级调试脚本、远程调试
日志管理工具(如 winston★★生产调试日志分级管理
APM 工具(如 New Relic)★★★★★生产级监控对系统性能进行监控

📌 二、使用 console.log() 基础调试(初级)

这是最常见的调试方式:

app.get('/user/:id', (req, res) => {console.log('User ID:', req.params.id);res.send('OK');
});

优点: 简单直接
缺点: 多处嵌套或异步函数中难以追踪,不适合生产环境


🎯 三、使用 debug 模块进行模块化日志调试(推荐)

1. 安装

npm install debug

2. 使用方法

const debug = require('debug')('myapp:server');app.get('/test', (req, res) => {debug('This is a test log');res.send('debugging');
});

3. 开启调试

运行项目时开启对应命名空间:

DEBUG=myapp:* node app.js

🛠️ 四、使用 VSCode 进行断点调试(强烈推荐)

1. 配置 launch.json

.vscode/launch.json 中添加如下配置:

{"version": "0.2.0","configurations": [{"type": "node","request": "launch","name": "Debug Express App","program": "${workspaceFolder}/app.js","env": {"NODE_ENV": "development"},"skipFiles": ["<node_internals>/**"]}]
}

2. 添加断点并运行调试

  • 在代码行号左侧点击添加断点;
  • 在 VSCode 左侧点击 ▶️ “Debug Express App”;
  • 使用调试控制台查看变量、调用栈等信息。

🔍 五、使用 node inspect CLI 调试

1. 启动带调试的 Node.js 程序

node inspect app.js

或使用 Chrome DevTools:

node --inspect-brk app.js

然后打开 Chrome,访问:chrome://inspect


📜 六、集成日志记录工具(如 winston

1. 安装

npm install winston

2. 使用示例

const winston = require('winston');const logger = winston.createLogger({level: 'info',format: winston.format.combine(winston.format.timestamp(),winston.format.simple()),transports: [new winston.transports.Console(),new winston.transports.File({ filename: 'logs/app.log' })]
});logger.info('Server started');
logger.error('Something went wrong');

📡 七、远程和生产环境调试

  • 使用 PM2 管理进程并查看日志:
npm install pm2 -g
pm2 start app.js --name my-app
pm2 logs my-app
  • 使用 APM 工具(如 New Relic、Datadog)监控性能、内存、错误。

🧠 八、调试 Express 中间件和异步代码注意事项

1. 异步代码中的错误追踪

app.get('/', async (req, res, next) => {try {const data = await fetchData();res.send(data);} catch (err) {next(err);}
});

2. 错误处理中间件

app.use((err, req, res, next) => {console.error(err.stack);res.status(500).send('Something broke!');
});

✅ 总结

调试方式推荐场景难度
console.log快速测试
debug日志分类调试
VSCode 调试开发断点、变量跟踪中高
node inspect命令行调试
winston日志归档、记录
APM 工具生产环境监控

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.pswp.cn/diannao/85997.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Spring Boot 启动流程及配置类解析原理

Spring Boot 是一个基于 Spring 框架的开源框架&#xff0c;旨在简化 Spring 应用的配置和部署。通过提供约定优于配置的原则&#xff0c;Spring Boot 大大降低了 Java 企业级应用的开发复杂度。本文将详细介绍 Spring Boot 的启动流程及其配置类的解析原理&#xff0c;帮助开发…

Flask 核心概念速览:路由、请求、响应与蓝图

一、路由参数与请求方法 Flask 路由允许定义多种参数类型,并通过 methods 属性限制请求方法。 1. 路由参数类型: 除了默认的 string,Flask 还支持: int: 匹配整数,自动转换为 Python int 类型。非数字输入会返回 404。 float: 匹配浮点数,自动转换为 Python float 类型…

Beckhoff(倍福)PLC 顺控程序转换条件解读

一、请求机器人上件步 二、程序代码解释:1、程序代码1&#xff1a; 1、程序代码&#xff1a; fbVar_TonDelay2(IN : (bInPartPresentLeft AND bInPartPresentRight), PT : T#100MS);(* Go to the next step *) stVar_SEQ.bTOK : stVar_SEQ.bRELEASE AND(stGV_SYS_ELEMENTS.ar…

KITTI数据集(计算机视觉和自动驾驶领域)

KITTI&#xff08;Karlsruhe Institute of Technology and Toyota Technological Institute at Chicago&#xff09;数据集是计算机视觉和自动驾驶领域中最广泛使用的基准数据集之一。它由德国卡尔斯鲁厄理工学院和美国芝加哥丰田技术研究所联合发布&#xff0c;旨在推动自动驾…

echarts在uniapp中使用安卓真机运行时无法显示的问题

文章目录 一、实现效果二、话不多说&#xff0c;上源码 前言&#xff1a;我们在uniapp中开发的时候&#xff0c;开发的时候很正常&#xff0c;echarts的图形在h5页面上也是很正常的&#xff0c;但是当我们打包成安卓app或者使用安卓真机运行的时候&#xff0c;图形根本就没有渲…

C#使用MindFusion.Diagramming框架绘制流程图(1):基础类型

MindFusion.Diagramming框架 在C#中使用MindFusion.Diagramming.dll库来创建图表和图形界面&#xff0c;可以让你构建出丰富和交互式的图形应用。MindFusion.Diagramming 是一个强大的库&#xff0c;支持创建各种类型的图表&#xff0c;例如流程图、网络图、组织结构图等。 M…

LangChain【6】之输出解析器:结构化LLM响应的关键工具

文章目录 一 LangChain输出解析器概述1.1 什么是输出解析器&#xff1f;1.2 主要功能与工作原理1.3 常用解析器类型 二 主要输出解析器类型2.1 Pydantic/Json输出解析器2.2 结构化输出解析器2.3 列表解析器2.4 日期解析器2.5 Json输出解析器2.6 xml输出解析器 三 高级使用技巧3…

Spring Boot项目中JSON解析库的深度解析与应用实践

在现代Web开发中&#xff0c;JSON&#xff08;JavaScript Object Notation&#xff09;作为轻量级的数据交换格式&#xff0c;已成为前后端通信的核心桥梁。Spring Boot作为Java生态中最流行的微服务框架&#xff0c;提供了对多种JSON库的无缝集成支持。本文将深入探讨Spring B…

OPenCV CUDA模块光流------高效地执行光流估计的类BroxOpticalFlow

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 cv::cuda::BroxOpticalFlow 是 OpenCV CUDA 模块中实现Brox光流算法的类。该类用于在 GPU 上高效地计算两帧图像之间的稠密光流&#xff08;Dens…

视觉分析在人员行为属性检测中的应用

基于视觉分析的人员行为属性检测方案 一、背景与需求分析 在工业生产、建筑施工、公共安全等领域&#xff0c;人员行为属性的合规性检测是保障安全生产的关键环节。例如&#xff0c;工地工人未佩戴安全帽、厨房人员未佩戴手套、作业现场人员使用手机等行为&#xff0c;均可能…

Linux--进程的程序替换

问题导入&#xff1a; 前面我们知道了&#xff0c;fork之后&#xff0c;子进程会继承父进程的代码和“数据”&#xff08;写实拷贝&#xff09;。 那么如果我们需要子进程完全去完成一个自己的程序怎么办呢&#xff1f; 进程的程序替换来完成这个功能&#xff01; 1.替换原理…

场景题-3

如何实现一个消息队列 拆解分析主流的几种消息队列 1、基本架构 生产者Producer、消费者Consumer、Broker&#xff1a;生产者发送消息&#xff0c;消费者接受消息&#xff0c;Broker是服务端&#xff0c;处理消息的存储、备份、删除和消费关系的维护。 主题和分区&#xff…

vue2 项目中 npm run dev 运行98% after emitting CopyPlugin 卡死

今天在运行项目时&#xff0c;发现如下问题&#xff1a; 开始以为是node_modules依赖的问题&#xff0c;于是重新 npm install&#xff0c;重启项目后还是未解决。 在网上找了一圈发现有人说是 require引入图片地址没有写。在我的项目中排查没有这个问题&#xff0c;最后发现某…

73 LV的使用(XFS文件系统)

四 LV的使用 先创建一个LV01 lvcreate -L 10G lv01 datavg Logical volume "lv01" created. 将创建出来的LV01进行格式化 mkfs.xxx LV的名称(绝对路径) 绝对路径的组成:/dev/你创建VG的名字/LV的名字 mkfs.xfs /dev/datavg/lv01 挂载你的LV…

mybatis中判断等于字符串的条件怎么写

mybatis中判断等于字符串的条件怎么写_mybatis 等于字符串-CSDN博客 因为mybatis映射文件&#xff0c;是使用的ognl表达式&#xff0c;ognl是java语言&#xff08;强类型语言&#xff09;&#xff0c;会把‘X’解析成字符&#xff0c;而不是字符串。 所以比较字符串相等使用是…

C语言实现绝对值差值函数

在C语言中&#xff0c;可以编写一个函数来计算两个数的差值的绝对值。以下是一个简单的实现&#xff1a; #include <stdio.h> #include <stdlib.h> // 用于abs函数&#xff08;如果需要&#xff09; // 方法1&#xff1a;使用标准库函数 int absoluteDifference1…

Three.js中AR实现详解并详细介绍基于图像标记模式AR生成的详细步骤

文档地址 Three.js中AR实现详解 以下是Three.js中实现AR功能的详细解析&#xff0c;涵盖技术原理、实现步骤、核心组件及优化策略&#xff1a; &#x1f9e9; 一、技术基础 AR.js框架的核心作用 AR.js是Three.js实现AR的基石&#xff0c;提供以下核心能力&#xff1a; 多模…

Vue3.5 企业级管理系统实战(二十三):权限指令

在实际应用场景中&#xff0c;常常需要依据用户角色对按钮的操作权限实施控制。实现这一控制主要有两种方式&#xff1a;一种是借助前端指令基于角色进行权限管控&#xff0c;另一种是通过后台返回对应的权限属性来实现精细化控制。本文聚焦于前端权限指令展开探讨。 1 权限指…

软考 系统架构设计师系列知识点之杂项集萃(81)

接前一篇文章&#xff1a;软考 系统架构设计师系列知识点之杂项集萃&#xff08;80&#xff09; 第145题 商业智能是企业对商业数据的搜集、管理和分析的系统过程&#xff0c;主要技术包括&#xff08;&#xff09;。 A. 数据仓库、联机分析和数据挖掘 B. 数据采集、数据清洗…

深入浅出Java ParallelStream:高效并行利器还是隐藏的陷阱?

在Java 8带来的众多革新中&#xff0c;Stream API彻底改变了我们对集合操作的方式。而其中最引人注目的特性之一便是parallelStream——它承诺只需简单调用一个方法&#xff0c;就能让数据处理任务自动并行化&#xff0c;充分利用多核CPU的优势。但在美好承诺的背后&#xff0c…