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

nodejs通过函数名进行静态方法调用出现类型错误,为什么

发布网友 发布时间:2022-05-03 11:40

我来回答

2个回答

懂视网 时间:2022-05-14 22:59

这篇文章给大家详细介绍了如何在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-05-14 20:07

在JS里,一切都是对象,所谓的class并不是传统语言上的定义或者声明,而是直接创建出来了(已分配内存)。
Myfunc是个构造函数(constructor),所有在构造函数中创建的变量和方法都是prototype的。
因此
function Myfunc(){
this.myMethod=function(){
}
}

function Myfunc(){
}
Myfunc.prototype.myMethod=function(){
}
是等效的。
所以调用前必须new一下。
而下面这段是可以的,因为直接给Myfunc对象加了一个方法myMethod。恩只是写法和用法像静态而已。
function Myfunc(){
}
Myfunc.myMethod=function(){
}
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
工科考研50分数学能过国家线吗 数一工科国家线一般多少分 笔记本电脑无线连接epson爱普生打印机wifi怎么连接 爱普生如何无线连接 身份证注销了银行卡还可以用吗 8424西瓜是哪里产的? 一个人开两个支付宝是同一个二维码吗 买个衣服很生气,投诉无门, 拉夏贝尔衣服可以退吗 断桥铝门窗有多少种 nodejs通过函数名进行静态方法调用出现类型错误,为什么? 关公的精彩故事简介 nodejs获取的对象怎么使用 《野菊花》这篇文章中,短文描写了野菊花的什么,表达了作者怎样的良好愿望 nodejs如何调用java的接口 关于野菊花的诗词 《野菊花》这篇文章中,短文描写了野菊花的什么,表达 野菊花这首关于一二九事件的诗歌在哪里可以找到? nodejs 怎么调用localstorage 野菊花的古诗词 樊发稼在《野菊花》这首诗表达了什么心情? 《野菊花》作者是谁? [探讨]为什么说JavaScript是性价比最高的技术? 请教在html中是否可以通过nodejs直接调用摄 你好,我在榆林去胡杨林想坐火车,坐到什么地方的火车站下车 如果对方把我的手机号拉黑了,我给他发信息能发出去吗?他能收到信息吗? 拉黑对方电话号码以后会收到拦截短信吗 QQ防沉迷身份证名字填错对号码安全有影响吗? qq安全中心里的证件号码是申诉时要用的证件号码吗,如果申诉时填错了还能不能找回 怎么把任务管理器里显示的内存单位改成K 野菊花 表达作者怎样的思想感情 太行山的野菊花阅读答案 正宗云南酸辣粉要怎么做? 我想在五八同城打广告? 宽带能用,电视不能看,错误代码显示0007是怎么回事 混凝土预制件强度一般是多少或者国家标准要求多少? “洞口超过300mm的设置过梁”出自哪个规范 过梁的配筋? 预制砼过粱C25,但遇柱~构造柱~粱~圈粱时改为现浇。 预制构件的混凝土等级不小于多少? 说明中 圈梁,过梁,构造柱 的砼标号是多少?为什么 框架结构能用c20混凝土吗 我想用QQ邮箱发送一个简历、为什么上面不能带上照片?急急急!! 27层高住宅混泥土c30够吗 现浇过梁3.6米,钢筋锚入构造柱多少 预制钢筋混凝土过梁的砂浆强度等级一般为多少 照明配电箱宽度大于300mm预埋时需要加砼过梁吗? 结构构件混凝土强度等级如何确定?比如说为什么梁的砼等级为C30,而连梁的砼等级为C45. 主体混凝土强度达到多少后才可以进行砌筑?? 什么是过梁