nodejs中的错误类型及捕获处理

news2024/11/25 11:34:48

nodejs中的错误类型及捕获处理

node 中,提供了 error 模块,并且内置了标准的 JavaScript 错误,本文将介绍在node中错误类型以及如何捕获。

错误类型

js错误

标准的js错误,跟在浏览器中运行js时提示的错误类型一样

RangeError

当一个值不在其所允许的范围或者集合中。

例如不能将数字的有效位数位 1-100,将其设置为 200 就出现RangeError错误。

const num = 1;
num.toPrecision(200);

在这里插入图片描述

ReferenceError

引用未声明的变量。

console.log(undefinedVariable);

在这里插入图片描述

SyntaxError

解析时发生语法错误。

一般SyntaxError在构建阶段,甚至本地开发阶段就会被发现。

constt a;
lett b;
varr c;

在这里插入图片描述

TypeError

值类型不对,当传入函数的操作数或参数的类型并非操作符或函数所预期的类型时,将抛出一个 TypeError 类型错误。

const nul = null;
console.log(null.value);

在这里插入图片描述

URIError

URI函数被错误使用时抛出(比如字符串包含了%字符,执行decodeURIComponent时就会报错)

console.log(decodeURIComponent("https:/example.com%"));

在这里插入图片描述

EvalError

调用eval()失败时抛出

系统错误

系统错误是对JavaScript错误Error对象的一个扩展,它们表示程序能够处理的操作错误,这些错误信息都是在系统级别生成的(比如我们想打开一个文件,但是系统中不存在这个文件,就会抛出系统错误)。

const fs = require("fs");
fs.readFile("/null", (err, data) => {
  if (err) console.log(err);
  else console.log(data);
});

在这里插入图片描述

assert断言错误

通过 assert 模块抛出的错误。

const assert = require("assert");
const a = 1;
assert(a > 10, "a不能小于10");
console.log("last");

在这里插入图片描述

自定义错误

通过throw手动抛出错误:

const a =1;
if(a < 2) {
	throw Error('小于2')
}

在这里插入图片描述

捕获处理

同步代码

同步代码中的异常使用try...catch结构即可捕获处理。

try {
  throw new Error('error');
} catch (e) {
  console.error(e.message);
}

异步代码

使用回调函数

不过大多数Node.js核心API都提供了回调函数来处理错误,比如:

const fs = require("fs");
fs.readFile("/null", (err, data) => {
  if (err) console.log(err);
  else console.log(data);
});

通过回调函数的err参数来检查是否出现错误,再进行处理。Node.js之所以采用这种错误处理机制,是因为异步方法所产生的方法并不能简单地通过try...catch机制进行拦截。

如果在程序执行过程中出现了未捕获的异常,那么程序就会崩溃,因此先把错误进行捕获后传递到回调函数中,就不会让程序奔溃,后续代码也能被顺利运行

使用process模块

因为异常并不是事先准备好的,不能控制其到底在哪儿发生,所以我们可以通过监听应用进程的错误异常,从而捕获到不能预料的错误异常,保证应用不至于奔溃。

process.on('uncaughtException', (e)=>{
  console.error('process error is:', e.message);
});

通过使用process模块监听uncaughtException事件,可以捕获到整个进程包含异步中的错误信息。

当异常出现时,对应执行栈中断,process捕获的异常事件导致v8引擎的垃圾回收功能不能按照正常流程工作,然后开始出现内存泄漏问题。

相对于异常来说,内存泄漏也是一个不能忽视的严重问题,而process.on('uncaughtException')的做法,很难去保证不造成内存的泄漏。所以当捕获到异常时,显式的手动杀掉进程,并开始重启node进程,即保证释放内存,又保证了保证服务后续正常可用。

process.on('uncaughtException', (e)=>{
  console.error('process error is:', e.message);
  process.exit(1);
  restartServer(); // 重启服务
});

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

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

相关文章

Linux 遍历目录(cd 命令)

Linux 遍历目录&#xff08;cd 命令&#xff09; 文章目录 Linux 遍历目录&#xff08;cd 命令&#xff09;一、cd 命令二、绝对文件路径三、相对文件路径 一、cd 命令 在 Linux 文件系统上&#xff0c;可以使用 cd 命令将 shell 会话切换到另一个目录。cd 命令的格式也很简单…

C++---多态

多态 前言多态的概念多态的定义及实现多态的构成条件虚函数虚函数的重写虚函数重写的两个例外协变(基类与派生类虚函数返回值类型不同)析构函数的重写 override和final 虚函数的默认参数 抽象基类 前言 在买火车票的时候&#xff0c;如果你是学生&#xff0c;是买半价票&#…

8年经验之谈 —— App测试常用的两种工具

一、监控工具 DDMS的全称是Dalvik Debug Monitor Service ,是Android开发环境中的Dalvik虚拟机调试监控服务。提供测试设备截屏、查看特定进程正在运行的线程以及堆信息、Logcat、广播状态信息、模拟电话呼叫、模拟接收及发送SMS、虚拟地理坐标等服务。 启动DDMS Eclipse中启…

某上市企业RFID资产管理设计解决方案

背景简介 该客户是一家集金融业务、房地产开发、商业地产等多元业务于一体的大型企业集团&#xff0c;作为一个拥有大量固定资产的企业&#xff0c;该客户一直以来面临着资产管理的难题&#xff0c;为了提高资产管理效率&#xff0c;降低管理成本&#xff0c;选择了广东航连科…

Python运算符、函数与模块和程序控制结构

给我家憨憨写的python教程 ——雁丘 Python运算符、函数与模块和程序控制结构 关于本专栏一 运算符1.1 位运算符1.1.1 按位取反1.1.2 按位与1.1.3 按位或1.1.4 按位异或1.1.5 左移位 1.2 关系运算符1.3 运算顺序1.4 运算方向 二 函数与模块2.1 内建函数2.2 库函数2.2.1 标准库…

elk日志某个时间节点突然搜索不到了

elk日志某个时间节点突然搜索不到了,检查filebeat正常 Kibana手动上传数据: 响应: Error: Validation Failed: 1: this action would add [2] total shards, but this cluster currently has [2000]/[2000] maximum shards open 原因:ElasticSearch总分片数量导致的异常,ES…

语言建模的发展阶段以及大规模语言模型的背景介绍

语言本质上是一个由语法规则控制的复杂、精密的人类表达系统&#xff0c;开发能够理解和掌握语言的AI 算法是一个重大挑战。作为一种主要方法&#xff0c;语言建模在过去两十年中已被广泛研究&#xff0c;从统计语言模型发展到神经语言模型&#xff0c;用于语言理解和生成。从技…

服务网格和性能优化:介绍如何通过服务网格提高微服务架构的性能和可扩展性

&#x1f337;&#x1f341; 博主猫头虎 带您 Go to New World.✨&#x1f341; &#x1f984; 博客首页——猫头虎的博客&#x1f390; &#x1f433;《面试题大全专栏》 文章图文并茂&#x1f995;生动形象&#x1f996;简单易学&#xff01;欢迎大家来踩踩~&#x1f33a; &a…

使用Jaeger进行分布式跟踪:学习如何在服务网格中使用Jaeger来监控和分析请求的跟踪信息

&#x1f337;&#x1f341; 博主猫头虎 带您 Go to New World.✨&#x1f341; &#x1f984; 博客首页——猫头虎的博客&#x1f390; &#x1f433;《面试题大全专栏》 文章图文并茂&#x1f995;生动形象&#x1f996;简单易学&#xff01;欢迎大家来踩踩~&#x1f33a; &a…

竹云董事长董宁受邀出席香港第三届湾区元宇宙大会暨AIGC、RWA发展高峰论坛并作主题演讲

“一元初分&#xff0c;宇宙万仪”。9月16日&#xff0c;第三届湾区元宇宙大会暨AIGC、RWA发展高峰论坛在香港圆满落幕。全球权威机构、顶级专家学者、杰出企业家代表齐聚一堂&#xff0c;畅所欲言&#xff0c;全面总结分析元宇宙现状&#xff0c;综合研判元宇宙未来发展趋势。…

DJYOS开源往事二:DJYOS开源工作室时期

2010年&#xff0c;罗侍田、王建忠等人在南山科技园创建都江堰操作系统工作室。通过自有资金、网友赞助资源等各种形式&#xff0c;从2010年开始建立了一支全职的民间组织的国产操作系统开发者团队。

vite构建的本地开发环境请求第三方接口时如何解决跨域问题

前言 在vite构建的本地开发环境中&#xff0c;请求第三方接口时如何解决跨域问题呢&#xff1f; 本地开发环境,只要请求接口,如果没有做代理配置,都会存在同源策略,跨域的问题,要么在本地做代理,要么在服务器做代理,要么在请求头中设置允许跨域,下面我们来介绍下如何解决vite构…

keil报错:Flash Download failed - Could not load file‘..\..\Output\Template.axf

keil报错&#xff1a;Flash Download failed - Could not load file’…\Output\Template.axf&#xff0c;如下图所示&#xff1a; 原因是很多.h文件没有定义位置&#xff0c;可以按照下图操作&#xff1a; 而且&#xff0c;如果是想使用压缩包&#xff0c;那一定要关闭keil后…

Re0: 从零实现一个解除文件占用的小工具

前言 相信大家或多或少都遇到过想删除一个文件&#xff0c;却提示被占用的情况&#xff1a; 不知道各位都是如何处理的&#xff0c;反正我一直都是用的火绒&#x1f604;。但是作为一名程序员&#xff0c;自己写一个小程序实现多有意思&#xff0c;是吧。况且为了一个小工具去…

【微信小程序开发】宠物预约医疗项目实战-注册实现

【微信小程序开发】宠物预约医疗项目实战-注册实现 第二章 宠物预约医疗项目实战-注册实现 文章目录 【微信小程序开发】宠物预约医疗项目实战-注册实现前言一、打开项目文件二、编写wxss代码2.1 什么是wxss2.2 配置主程序全局样式 三. 在sign文件下的wxml文件中编写如下代码并…

使用qt完善对话框功能

1、 完善登录框 点击登录按钮后&#xff0c;判断账号&#xff08;admin&#xff09;和密码&#xff08;123456&#xff09;是否一致&#xff0c;如果匹配失败&#xff0c;则弹出错误对话框&#xff0c;文本内容“账号密码不匹配&#xff0c;是否重新登录”&#xff0c;给定两…

【深度学习实验】线性模型(五):使用Pytorch实现线性模型:基于鸢尾花数据集,对模型进行评估(使用随机梯度下降优化器)

目录 一、实验介绍 二、实验环境 1. 配置虚拟环境 2. 库版本介绍 三、实验内容 0. 导入库 1. 线性模型linear_model 2. 损失函数loss_function 3. 鸢尾花数据预处理 4. 初始化权重和偏置 5. 优化器 6. 迭代 7. 测试集预测 8. 实验结果评估 9. 完整代码 一、实验介…

大语言模型的机遇和挑战

自然语言处理包含自然语言理解和自然语言生成两个方面, 常见任务包括文本分类, 结构分析 (词法分析, 分词, 词性标注, 句法分析, 篇章分析), 语义分析, 知识图谱, 信息提取, 情感计算, 文本生成, 自动文摘, 机器翻译, 对话系统, 信息检索和自动问答等. 在神经网络方法出现之前,…

Vue3_vite

使用Vue-cli创建 使用vite创建 Composition API 组合API setup 1.Vue3中的一个新的配置项,值为一个函数 2.可以将组件中所用到的数据,方法等配置在setup中. 3.setup函数的两种返回值 3.1若返回一个对象,则对象中的属性,方法,在模板中均可以直接使用. 3.2若返回一个渲染函数…

Leetcode.337 打家劫舍 III

题目链接 Leetcode.337 打家劫舍 III mid 题目描述 小偷又发现了一个新的可行窃的地区。这个地区只有一个入口&#xff0c;我们称之为 root 。 除了 root 之外&#xff0c;每栋房子有且只有一个“父“房子与之相连。一番侦察之后&#xff0c;聪明的小偷意识到“这个地方的所有…