问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

nodejs 运行错误:module.js:340 throw err;是什么原因

发布网友 发布时间:2022-04-22 17:40

我来回答

3个回答

懂视网 时间:2022-04-22 22:01

这篇文章给大家详细介绍了如何在Node.js下自定义错误类型,对大家学习或者使用Node.js具有一定的参考借鉴价值,有需要的朋友们可以参考借鉴,下面来一起看看吧。

前言

一般来说,很少人会考虑如何处理应用产生的错误的策略,调试的过程中,简单地利用console.log(‘error')定位错误,基本够用了,通过留下这些调试信息,能够为我们以后的调试过程中升了不少时间,提高了维护性。所以错误提示非常重要。同时,也会带来一些比较糟糕用法。最近的项目里就用到了自定义错误类型,觉得有必要深入了解一下,所以就写了这篇文章,方便自己和有需要的大家在需要的时候查阅。

Subclassing Error

首先我们可以定义一个 Error 的子类。通过 Object.create util.inherits 很容易实现:

var assert = require('assert');
var util = require('util');

function NotFound(msg){
 Error.call(this);
 this.message = msg;
}
util.inherits(NotFound, Error);
var error = new NotFound('not found');
assert(error.message);
assert(error instanceof NotFound);
assert(error instanceof Error);
assert.equal(error instanceof RangeError, false);

可以通过 instanceof 来检查错误类型,根据类型进行不同的处理。

上面的代码设置了自带的message, 并且 error NotFound Error 的一个实例, 但是不是 RangeError

如果用了 express 框架, 就能设置其他的 properties error 变得更有用。

比方说当处理一个HTTP的错误时, 就可以写成这样:

function NotFound(msg) {
 Error.call(this);
 this.message = msg;
 this.statusCode = 404;
}

现在就已经可以通过错误处理的中间件来处理错误信息:

app.use(function(err, req, res, next) {
 console.error(err.stack);

 if (!err.statusCode || err.statusCode === 500) {
 emails.error({ err: err, req: req });
 }

 res.send(err.statusCode || 500, err.message);
});

这会发送HTTP的状态码给浏览器, 当 err statusCode 未设置或者等于 500 的时候, 就通过邮件来发送这个错误。这样就能排除那些 404, 401, 403等等的错误。

读取 console.error(err.stack) 事实上并不会像预期那样工作,像 node, chrome 基于 V8 的可以使用 Error.captureStackTrace(this, arguments.callee) 的错误构造函数来进行堆栈跟踪。

var NotFound = function(msg) {
 Error.call(this);
 Error.captureStackTrace(this, arguments.callee);
 this.message = msg || 'Not Found';
 this.statusCode = 404;
 this.name = "notFound"
}
util.inherits(NotFound, Error);

export.NotFoundError = NotFound;

当然我们还可以将上面这个创建的抽象错误类型扩展到其他自定义错误中:

var notFountError = require('./error').NotFountError; 
var UserNotFound = function(msg){
 this.constructor.super_(msg);
}

util.inherits(UserNotFound, notFoundError);

热心网友 时间:2022-04-22 19:09

node.js 只在当前目录下搜索,如果文件在不同的目录下的话就要拷贝过来,或者cd过去

热心网友 时间:2022-04-22 20:27

是由于molejs这个文件的第340行抛出了一个异常检查方法是,找到这个文件,然后看第340行附近的代码逻辑,分析抛出异常的条件nodejs运行错误:molejs:340throwerr;是什
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
八月中国最凉快的地方 八月份哪里最凉快,去哪旅游好?美丽的地方 乱字同韵字是什么意思 华硕笔记本电脑触摸板怎么开笔记本电脑触摸板怎么开启和关闭_百度知 ... 陕西职务侵占案立案准则 结婚后我的恋情维系了十年,怎么做到的? 玉米仁子饭产自哪里 中国期货交易所的交易品种有哪些? 历史要怎么读,有啥诀窍 高中历史诀窍 昆山初级会计准考证打印需要注意什么 昆山会计证考试时间 昆山考一个会计证要多少钱 107x78的简便运算怎么做? 102x78-156用简便方法计算 电动车的钢印在哪里打印?怎么打印? SPSS怎样做参数检验 心理统计学检验方法? 计算102×78的时候应先把102看成100+2再用什么运算律计算就会比较方便? 自己做淡奶油可以做蛋挞液吗? 钢印应该怎么用? 如何理解抽样分布在进行参数估计,假设检验统计方法的作用 102×78和47×49十47X51的简便计算怎么算? 参数检验和非参数检验的方法分别有哪些如何选择恰当的方法进行统计分析 用简便方法计算:102×78. 计算102×78的时候应先把什么看成什么再用什么前运算定律计算会比较简便? 钻戒哪个品牌好?最好推荐一些价格实惠的牌子! 飞利浦LED灯管产地是哪里 102x78脱式计算,我不会 各位同行我想知道灯具的主要产地~~!!! 哪家公司生产的吸顶灯好? 怎么印钢印 有答必给 死神动画285对应漫画的多少 死神动画285对应漫画的什么地方? 不是昆山本地人可以报会计初级职称吗? 复现代码需要下载什么软件 死神285集在线观看 死神285集漫画 死神第285集 死神285集视频高清版 海贼王281集到285集全是回忆吗 死神285百年的怨恨!日世里的复仇是漫画第几? 求动漫网盘 资源共享 银魂最新一季的生肉(266-285)非常感谢…… 代码怎么下载? 家庭教师漫画285中文版什么时候出 最新的动漫新番及其简介 昆山考初级会计职称需要哪些居住证吗 推荐点好看的动漫嘛···越多越好··· 江苏昆山的2007年初级会计资格考试的时间和地点谁知道啊? 怎么用代码下载资源? 刀剑乱舞回想36怎么触发 新喀里多尼亚的地位特殊是指什么 新喀里多尼亚在七大洲的哪个大洲? 世界上还有哪些尚未独立的地区