English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
util은 Node.js의 핵심 모듈로, 일반적인 함수 모음을 제공하여 기본 JavaScript의 기능이 너무 간단하다는 단점을 보완합니다.
사용 방법은 다음과 같습니다:
const util = require('util');
util.callbackify(original)는 async 비동기 함수(또는 Promise를 반환하는 함수)를 예외 우선의回调 스타일의 함수로 변환합니다. 예를 들어, (err, value) => ...回调을 마지막 파라미터로 사용합니다. 回调함수에서 첫 번째 파라미터는 거부 이유입니다(만약 Promise가 해결된 경우 null), 두 번째 파라미터는 해결된 값입니다.
const util = require('util'); async function fn() { return 'hello world'; } const callbackFunction = util.callbackify(fn); callbackFunction((err, ret) => { if (err) throw err; console.log(ret); });
위 코드의 출력 결과는 다음과 같습니다:
hello world
回调함수는 비동기로 실행되며, 예외 스택 트레이스를 추적합니다. 만약回调함수가 예외를 터뜨리면, 프로세스는 'uncaughtException' 예외를 발생시키며, 이가 잡히지 않으면 프로세스가 종료됩니다.
null은回调함수에서 특별한 의미를 가지고 있습니다. 만약回调함수의 첫 번째 파라미터가 Promise 거부 이유로 사용되고, 반환 값이布尔형 false로 변환될 수 있는 경우, 이 값은 Error 객체에 포장되어, reason 속성을 통해 접근할 수 있습니다.
function fn() { return Promise.reject(null); } const callbackFunction = util.callbackify(fn); callbackFunction((err, ret) => { // Promise가 `null`로 거부될 때, 그것은 Error로 래핑되고 원래 값은 `reason`에 저장됩니다. err && err.hasOwnProperty('reason') && err.reason === null; // true });
original이 async 동기 함수입니다. 이 함수는 전통적인 콜백 함수를 반환합니다.
util.inherits(constructor, superConstructor)는 객체 간 프로토타입 상속을 구현하는 함수입니다.
JavaScript의 동기적 객체 지향적 특성은 프로토타입 기반으로, 일반적인 클래스 기반과 다릅니다. JavaScript는 객체 상속을 위한 언어 수준의 특성을 제공하지 않으며, 대신 프로토타입 복사를 통해 구현됩니다.
여기서는 util.inherits의 사용법을 소개하겠습니다. 다음은 예제입니다:
var util = require('util'); function Base() { this.name = 'base'; this.base = 1991; this.sayHello = function() { console.log('Hello ') + this.name); }; } Base.prototype.showName = function() { console.log(this.name); }; function Sub() { this.name = 'sub'; } util.inherits(Sub, Base); var objBase = new Base(); objBase.showName(); objBase.sayHello(); console.log(objBase); var objSub = new Sub(); objSub.showName(); //objSub.sayHello(); console.log(objSub);
우리는 Base라는 기본 객체와 Base를 상속받은 Sub를 정의했습니다. Base는 생성자 내에 정의된 세 개의 속성과 프로토타입에 정의된 함수를 가지고 있으며, util.inherits를 통해 상속을 구현했습니다. 실행 결과는 다음과 같습니다:
base Hello base { name: 'base', base: 1991, sayHello: [Function] sub { name: 'sub' }
주의:}Sub은 Base 프로토 타입에 정의된 함수만을 상속받으며, 생성자 내부에서 생성된 base 속성과 sayHello 함수는 Sub에 상속되지 않습니다.
또한, 프로토 타입에 정의된 속성은 console.log으로 객체의 속성으로 출력되지 않습니다. objSub.sayHello(); 이 줄의 주석을 제거하면 다음과 같이 보일 것입니다:
node.js:201 throw e; // process.nextTick error, or 'error' event on first tick ^ TypeError: Object #<Sub> has no method 'sayHello' at Object.<anonymous> (/home/byvoid/utilinherits.js:29:8) at Module._compile (module.js:441:26) at Object..js (module.js:459:10) at Module.load (module.js:348:31) at Function._load (module.js:308:12) at Array.0 (module.js:479:10) at EventEmitter._tickCallback (node.js:192:40)
util.inspect(object, [showHidden], [depth], [colors])는 어떤 객체도 문자열로 변환하는 메서드로, 일반적으로 디버깅과 오류 출력에 사용됩니다. 이 메서드는 최소한 하나의 매개변수 object를 받아들이며, 변환할 객체입니다.
showHidden은 선택 사항입니다. true 값이면 더 많은 숨겨진 정보를 출력합니다.
depth는 최대 재귀 레벨을 나타내며, 객체가 복잡하다면 출력 정보의 양을 제어하기 위해 레벨을 지정할 수 있습니다. depth를 지정하지 않으면 기본적으로 재귀적으로 호출됩니다. 2 레벨을 null로 지정하면 객체를 무한히 재귀적으로 완전히 탐색합니다. colors 값이 true면 ANSI 색상 코드로 출력 형식이되며, 일반적으로 터미널에서 더 나은 효과를 위해 사용됩니다.
특히 util.inspect는 간단하게 직접 객체를 문자열로 변환하지 않으며, 객체가 toString 메서드를 정의했어도 호출되지 않습니다.
var util = require('util'); function Person() { this.name = 'byvoid'; this.toString = function() { return this.name; }; } var obj = new Person(); console.log(util.inspect(obj)); console.log(util.inspect(obj, true));
실행 결과는:
Person { name: 'byvoid', toString: [Function] } Person { name: 'byvoid', toString: { [Function] [length]: 0, [name]: '', [arguments]: null, [caller]: null, [prototype]: { [constructor]: [Circular] } }
주어진 매개변수 "object" 가 배열인 경우 true를 반환하고, 그렇지 않으면 false를 반환합니다.
var util = require('util'); util.isArray([]) // true util.isArray(new Array) // true util.isArray({}) // false
주어진 매개변수 "object" 가 정규 표현식인 경우 true를 반환하고, 그렇지 않으면 false를 반환합니다.
var util = require('util'); util.isRegExp(/some regexp/) // true util.isRegExp(new RegExp('another regexp')) // true util.isRegExp({}) // false
주어진 매개변수 "object" 가 날짜인 경우 true를 반환하고, 그렇지 않으면 false를 반환합니다.
var util = require('util'); util.isDate(new Date()) // true util.isDate(Date()) // false (without 'new' returns a String) util.isDate({}) // false
更多详情可以访问 http://nodejs.org/api/util.html 자세한 내용을 알아보세요.