Node.js에서 사용자 정의 오류 유형 분석

不言
풀어 주다: 2018-06-30 14:40:40
원래의
2410명이 탐색했습니다.

이 글에서는 Node.js에서 오류 유형을 사용자 정의하는 방법을 자세히 소개합니다. Node.js를 배우거나 사용하는 모든 사람이 참고할 수 있는 내용이 있습니다. .보세요.

머리말

일반적으로 애플리케이션에서 생성된 오류를 처리하는 방법에 대한 전략을 고려하는 사람은 거의 없습니다. 디버깅 프로세스 중에 간단히 console.log('error')를 사용하여 오류를 찾는 것만으로도 충분합니다. 이 디버깅 정보를 남겨두면 향후 디버깅 프로세스가 단축되고 유지 관리가 향상됩니다. 따라서 오류 메시지는 매우 중요합니다. 동시에, 그것은 또한 일부 나쁜 사용법을 가져올 것입니다. 최근 프로젝트에서는 사용자 정의 오류 유형이 사용되었으며 이에 대해 더 자세히 알아볼 필요가 있다고 느꼈기 때문에 저 자신과 필요한 다른 모든 사람이 필요할 때 더 쉽게 참조할 수 있도록 이 글을 썼습니다. 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)

Subclassing Error

먼저 Error의 하위 클래스를 정의할 수 있습니다. Object.create util.inherits 를 통해 쉽게 달성할 수 있습니다.

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;
로그인 후 복사

#🎜 🎜 #instanceof를 통해 오류 유형을 확인하고 유형에 따라 다른 처리를 수행할 수 있습니다.

위 코드는 내장된 메시지를 설정하고 error NotFound Error 입니다. code> code>의 인스턴스이지만 RangeError는 아닙니다.

express 프레임워크를 사용하는 경우 다른 속성 을 설정하여 error 를 더 유용하게 만들 수 있습니다.

예를 들어 HTTP 오류를 처리할 때 다음과 같이 작성할 수 있습니다.

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

util.inherits(UserNotFound, notFoundError);
로그인 후 복사
# 🎜 🎜#
이제 오류 처리 미들웨어를 통해 오류 메시지를 처리할 수 있습니다.

rrreee

#🎜🎜 #이것은 HTTP 상태 코드를 브라우저로 전송합니다. err statusCode 가 500으로 설정되지 않은 경우 이 오류는 이메일을 통해 전송됩니다. 이렇게 하면 404, 401, 403 등의 오류가 제거됩니다.

Reading console.error(err.stack)는 실제로 예상대로 작동하지 않습니다. 노드와 마찬가지로 V8 기반 크롬에서는 Error.captureStackTrace(이것은 인수)를 사용할 수 있습니다. .callee) 의 스택 추적에 대한 오류 생성자입니다.

rrreee

#🎜🎜##🎜🎜##🎜🎜#물론 위에서 생성한 추상 오류 유형을 다른 사용자 정의 오류로 확장할 수도 있습니다. # 🎜🎜# #🎜🎜##🎜🎜##🎜🎜#rrreee#🎜🎜##🎜🎜##🎜🎜#위 내용은 모두의 학습에 도움이 되기를 바랍니다. 관련 콘텐츠. PHP 중국어 웹사이트! #🎜🎜##🎜🎜#관련 권장 사항: #🎜🎜##🎜🎜##🎜🎜#nodejs의 모듈 정의 소개#🎜🎜##🎜🎜##🎜🎜##🎜🎜##🎜🎜#nodejs 페이지의 bigpipe 비동기 로딩을 구현하는 방법#🎜🎜##🎜🎜##🎜🎜##🎜🎜##🎜🎜#fs 모듈을 기반으로 시스템 파일과 디렉터리를 읽고 쓰는 node.js 방법에 대하여#🎜🎜# # 🎜🎜##🎜🎜##🎜🎜##🎜🎜##🎜🎜##🎜🎜##🎜🎜##🎜🎜#

위 내용은 Node.js에서 사용자 정의 오류 유형 분석의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
최신 이슈
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!