Node.js 전역 객체
JavaScript에는 전역 개체(Global Object)라는 특수 개체가 있습니다. 이 개체와 해당 개체의 모든 속성은 프로그램 어디에서나 액세스할 수 있습니다. 즉, 전역 변수입니다.
브라우저 JavaScript에서는 일반적으로 window가 전역 개체입니다. Node.js의 전역 개체는 전역이며 모든 전역 변수(전역 자체 제외)는 전역입니다. 객체의 속성.
Node.js에서는 애플리케이션에 포함하지 않고도 전역 속성에 직접 액세스할 수 있습니다.
전역 개체 및 전역 변수
전역의 가장 기본적인 역할은 전역 변수의 호스트 역할을 하는 것입니다. ECMAScript의 정의에 따르면 다음 조건을 만족합니다. 파일의 변수는 전역 변수입니다.
가장 바깥쪽 레이어에 정의된 변수,
전역 객체의 속성,
암시적으로 정의된 변수(값이 직접 할당되지 않은 변수).
전역 변수를 정의하면 이 변수도 전역 개체의 속성이 되며 그 반대의 경우도 마찬가지입니다. 주의할 점 흥미롭게도 Node.js에서는 모든 사용자 코드가 현재 모듈에 속하기 때문에 가장 바깥쪽 수준에서 변수를 정의할 수 없습니다. 모듈 자체는 가장 바깥쪽 컨텍스트가 아닙니다.
참고: 전역 변수 도입을 방지하려면 항상 var를 사용하여 변수를 정의하세요. 전역 변수가 오염되기 때문입니다. 네임스페이스는 코드 결합 위험을 증가시킵니다.
__filename
__filename은 현재 실행 중인 스크립트의 파일 이름을 나타냅니다. 파일 위치의 절대 경로가 출력되며 명령줄 매개변수에 지정된 파일 이름과 다를 수 있습니다. 모듈에 있는 경우 반환된 값은 모듈 파일의 경로입니다.
Example
main.js 파일을 생성합니다. 코드는 다음과 같습니다.
// 输出全局变量 __filename 的值 console.log( __filename );
main.js 파일을 실행합니다. 코드는 다음과 같습니다.
$ node main.js /web/com/php/nodejs/main.js
__dirname
__dirname은 현재 실행 중인 스크립트가 있습니다.
예제
main.js 파일을 생성합니다. 코드는 다음과 같습니다.
// 输出全局变量 __dirname 的值 console.log( __dirname );
main.js 파일을 실행합니다. 코드는 다음과 같습니다.
$ node main.js /web/com/php/nodejs
setTimeout(cb, ms)
setTimeout(cb) , ms) 전역 함수는 지정된 밀리초(ms) 후에 지정된 함수(cb)를 실행합니다. :setTimeout()은 지정된 함수를 한 번만 실행합니다.
타이머를 나타내는 핸들 값을 반환합니다.
Instance
main.js 파일을 생성합니다. 코드는 다음과 같습니다.
function printHello(){ console.log( "Hello, World!"); } // 两秒后执行以上函数 setTimeout(printHello, 2000);
main.js 파일을 실행합니다. 코드는 다음과 같습니다.
$ node main.js Hello, World!
clearTimeout(t)
clearTimeout(t) 전역 함수는 setTimeout()을 통해 이전에 생성된 타이머를 중지하는 데 사용됩니다. t 매개변수는 setTimeout() 함수에 의해 생성된 계산기입니다.
Example
main.js 파일을 생성합니다. 코드는 다음과 같습니다.
function printHello(){ console.log( "Hello, World!"); } // 两秒后执行以上函数 var t = setTimeout(printHello, 2000); // 清除定时器 clearTimeout(t);
main.js 파일을 실행합니다. 코드는 다음과 같습니다.
$ node main.js
setInterval(cb, ms)
setInterval(cb) , ms) 전역 함수는 지정된 밀리초(ms) 후에 지정된 함수(cb)를 실행합니다.
타이머를 나타내는 핸들 값을 반환합니다. clearInterval(t) 함수를 사용하여 타이머를 지울 수 있습니다.
setInterval() 메서드는clearInterval()이 호출되거나 창이 닫힐 때까지 함수를 계속 호출합니다.
예제
main.js 파일을 생성합니다. 코드는 다음과 같습니다.
function printHello(){ console.log( "Hello, World!"); } // 两秒后执行以上函数 setInterval(printHello, 2000);
main.js 파일을 실행합니다. 코드는 다음과 같습니다.
$ node main.jsHello, World! 안녕하세요, 월드! 안녕하세요, 월드! 안녕하세요, 월드! 안녕하세요, 월드! …
위 프로그램은 2초마다 "Hello, World!"를 출력하며 ctrl + c 버튼을 누를 때까지 영원히 실행됩니다.
console
console은 콘솔 표준 출력을 제공하는 데 사용되며 Internet Explorer의 JScript 엔진에서 제공하는 디버깅 도구이며 점차 브라우저의 사실상 표준이 되었습니다.
Node.js는 이 표준을 따르며 표준 출력 스트림(stdout) 또는 표준 오류 스트림(stderr)에 문자를 출력하는 데 사용되는 일관된 동작을 갖춘 콘솔 개체를 제공합니다.
콘솔 메소드
콘솔 객체의 메소드는 다음과 같습니다.
일련번호 | 메소드 및 설명 |
---|---|
1 | console.log([데이터][, ...]) 표준 준수 출력 스트림은 문자를 인쇄하고 개행 문자로 끝납니다. 이 메소드는 여러 개의 매개변수를 받습니다. 매개변수가 하나만 있는 경우 이 매개변수의 문자열 형식이 출력됩니다. 인수가 여러 개인 경우 출력은 C 언어 printf() 명령과 유사한 형식입니다. |
2 | console.info([data][, ...]) P이 명령의 기능은 정보 메시지를 반환하는 것입니다. 이 명령은 Chrome에서만 사용된다는 점을 제외하면 console.log와 크게 다르지 않습니다. 텍스트가 출력되고 나머지 부분에는 파란색 느낌표가 표시됩니다. |
3 | console.error([data][, ...]) 출력 오류 메시지입니다. 오류가 발생하면 콘솔에 빨간색 십자가가 표시됩니다. |
4 | console.warn([data][, ...]) 경고 메시지를 출력합니다. 콘솔에 노란색 느낌표가 나타납니다. |
5 | console.dir(obj[, options]) 은 객체를 검사하고 읽기 쉽고 인쇄 가능한 형식으로 표시하는 데 사용됩니다. |
6 | console.time(label) 출력 시간, 타이밍 시작을 나타냅니다. |
7 | console.timeEnd(label) End time, 타이밍의 끝을 나타냅니다. |
8 | console.trace(message[, ...]) 스택에서 현재 실행되는 코드의 호출 경로입니다. 이 테스트 기능은 원하는 함수에 콘솔을 추가하기만 하면 됩니다. 테스트해 보세요. |
9 | console.assert(value[, message][, ...]) 는 표현식이나 변수가 true인지 확인하는 데 사용됩니다. 첫 번째 매개변수는 표현식입니다. 수식에서 두 번째 매개변수는 문자열입니다. 두 번째 매개변수는 첫 번째 매개변수가 false인 경우에만 출력되며, 그렇지 않으면 결과가 없습니다. |
console.log 여러 개 허용 매개변수, 매개변수가 하나만 있는 경우 이 매개변수의 문자열 형식이 출력됩니다. 매개변수가 여러 개인 경우 C 언어 printf() 명령과 유사한 형식으로 출력됩니다.
첫 번째 매개변수는 문자열입니다(그렇지 않은 경우). 매개변수를 사용하면 개행 문자만 인쇄할 수 있습니다.
console.log('Hello world'); console.log('byvoid%diovyb'); console.log('byvoid%diovyb', 1991);
실행 결과는 다음과 같습니다.
Hello world byvoid%diovyb byvoid1991iovyb
console.error(): 사용법은 console.log()와 동일하지만 표준 오류 스트림으로 출력됩니다.
console.trace(): 현재 호출 스택을 표준 오류 스트림으로 출력합니다.
console.trace();
실행 결과는 다음과 같습니다.
Trace: at Object.<anonymous> (/home/byvoid/consoletrace.js:1:71) 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)
Instance
main.js 파일을 생성합니다. 코드는 다음과 같습니다.
console.info("程序开始执行:"); var counter = 10; console.log("计数: %d", counter); console.time("获取数据"); // // 执行一些代码 // console.timeEnd('获取数据'); console.info("程序执行完毕。")
main.js 파일을 실행합니다. 코드는 다음과 같습니다.
$ node main.js 程序开始执行: 计数: 10 获取数据: 0ms 程序执行完毕
process
process는 전역 변수는 전역 개체의 속성입니다.
현재 Node.js 프로세스 상태를 설명하는 데 사용되는 개체로, 운영 체제와의 간단한 인터페이스를 제공합니다. 일반적으로 로컬 명령줄 프로그램을 작성할 때 이를 처리해야 합니다. 프로세스 객체의 가장 일반적으로 사용되는 멤버 메소드 중 일부가 아래에 소개됩니다.
일련 번호 | 이벤트 및 설명 |
---|---|
1 | exit 프로세스를 종료할 준비가 되면 트리거됩니다. |
2 | beforeExit 이 이벤트는 노드가 이벤트 루프를 지우고 다른 조치가 없을 때 트리거됩니다. 일반적으로 프로세스가 예약되지 않으면 노드가 종료되지만 노드가 계속 실행되도록 'beforeExit' 리스너를 비동기식으로 호출할 수 있습니다. |
3 | uncaughtException 예외가 이벤트 루프로 다시 버블링되면 이 이벤트가 트리거됩니다. 모니터가 예외에 추가되면 기본 동작(스택 추적 인쇄 및 종료)이 발생하지 않습니다. |
4 | 신호 이벤트 는 프로세스가 신호를 받으면 트리거됩니다. 신호 목록은 SIGINT, SIGUSR1 등과 같은 표준 POSIX 신호 이름을 참조하세요. |
예제
main.js 파일을 생성합니다. 코드는 다음과 같습니다.
process.on('exit', function(code) { // 以下代码永远不会执行 setTimeout(function() { console.log("该代码不会执行"); }, 0); console.log('退出码为:', code); }); console.log("程序执行结束");
main.js 파일을 실행합니다. 코드는 다음과 같습니다.
$ node main.js 程序执行结束 退出码为: 0
종료 상태 코드
종료 상태 코드는 다음과 같습니다.
상태 코드 | 이름 및 설명 |
---|---|
1 | Uncaught Fatal Exception 포착되지 않은 예외가 있었고 도메인 또는 uncaughtException 처리기에 의해 처리되지 않았습니다. |
2 | Unused Reserved |
3 | 내부 JavaScript 구문 분석 오류 JavaScript 소스 코드로 인해 Node 프로세스를 시작할 때 구문 분석 오류가 발생합니다. 매우 드물며 Node.js를 개발할 때만 사용할 수 있습니다. |
4 | 내부 JavaScript 평가 실패 JavaScript의 소스 코드는 노드 프로세스를 시작하고 평가 중에 함수 실패를 반환합니다. 매우 드물며 Node.js를 개발할 때만 사용할 수 있습니다. |
5 | 치명적인 오류 V8의 치명적이고 복구할 수 없는 오류입니다. 일반적으로 stderr에 인쇄되는 내용은 다음과 같습니다: FATAL ERROR |
6 | Non-function Internal Exception Handler Uncaught 예외, 내부 예외 처리기 함수는 어떻게든 on-function으로 설정되어 호출할 수 없습니다. |
7 | 내부 예외 처리기 런타임 실패 발견되지 않은 예외 및 처리 중에 예외 처리기 함수가 예외 자체를 발생시켰습니다. 예를 들어, process.on('uncaughtException') 또는 domain.on('error')이 예외를 발생시키는 경우입니다. |
8 | Unused Reserved |
9 | 잘못된 인수 는 알 수 없는 매개변수가 제공되었거나 제공된 매개변수에 값이 없을 수 있습니다. |
10 | 내부 JavaScript 런타임 오류 JavaScript 소스 코드에서 Node 프로세스를 시작할 때 오류가 발생하는 경우는 매우 드물며 Node를 개발할 때만 발생합니다. |
12 | 잘못된 디버그 인수 매개변수 --debug 및/또는 --debug-brk가 설정되었지만 잘못된 포트가 선택되었습니다. |
>128 | 신호 종료 노드가 SIGKILL 또는 SIGHUP과 같은 치명적인 신호를 수신하는 경우 종료 코드는 128에 신호 코드를 더한 것입니다. 이는 종료 신호 코드가 높은 위치에 있는 표준 Unix 방식입니다. |
프로세스 속성
프로세스는 시스템 상호 작용을 더 잘 제어할 수 있도록 돕는 많은 유용한 속성을 제공합니다.
일련 번호. | 속성 및 설명 | ||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
1 | stdout 표준 출력 스트림. | ||||||||||||||||||||||||||||||||||||
2 | stderr 표준 오류 스트림. | ||||||||||||||||||||||||||||||||||||
3 | stdin 표준 입력 스트림. | ||||||||||||||||||||||||||||||||||||
4 | argv argv 속성은 명령줄에서 스크립트를 실행할 때 다양한 매개 변수로 구성된 배열을 반환합니다. 첫 번째 멤버는 항상 node이고, 두 번째 멤버는 스크립트 파일 이름이고, 나머지 멤버는 스크립트 파일의 매개변수입니다. | ||||||||||||||||||||||||||||||||||||
5 | execPath 현재 스크립트를 실행하는 노드 바이너리의 절대 경로를 반환합니다. | ||||||||||||||||||||||||||||||||||||
6 | execArgv 명령줄에서 스크립트를 실행할 때 노드 실행 파일과 스크립트 파일 사이의 명령줄 매개 변수를 멤버로 포함하는 배열을 반환합니다. | ||||||||||||||||||||||||||||||||||||
7 | env 현재 쉘의 환경 변수를 멤버로 하는 객체를 반환합니다. | ||||||||||||||||||||||||||||||||||||
8 | exitCode 프로세스가 종료될 때의 코드 process.exit. (), 종료 코드를 지정할 필요가 없습니다. | ||||||||||||||||||||||||||||||||||||
9 | version 노드 버전(예: v0.10.18). | ||||||||||||||||||||||||||||||||||||
10 | versions 노드 버전과 종속성이 포함된 속성 | ||||||||||||||||||||||||||||||||||||
11 | config 현재 노드 실행 파일을 컴파일하는 데 사용되는 자바스크립트 구성 옵션이 포함된 개체입니다. ./configure 스크립트를 실행하여 생성된 것과 동일한 "config.gypi" 파일입니다. | ||||||||||||||||||||||||||||||||||||
12 | pid 현재 프로세스의 프로세스 번호입니다. | ||||||||||||||||||||||||||||||||||||
13 | title 프로세스 이름, 기본값은 "노드"이며, 이 값은 사용자 정의할 수 있습니다. | ||||||||||||||||||||||||||||||||||||
14 | arch 현재 CPU 아키텍처: 'arm', 'ia32' 또는 'x64'. F15lPlatform | ||||||||||||||||||||||||||||||||||||
16 Requile | |||||||||||||||||||||||||||||||||||||
예제main.js 파일을 생성합니다. 코드는 다음과 같습니다. // 输出到终端 process.stdout.write("Hello World!" + "\n"); // 通过参数读取 process.argv.forEach(function(val, index, array) { console.log(index + ': ' + val); }); // 获取执行路局 console.log(process.execPath); // 平台信息 console.log(process.platform); main.js 파일을 실행합니다. 코드는 다음과 같습니다. $ node main.js Hello World! 0: node 1: /web/www/node/main.js /usr/local/node/0.10.36/bin/node darwin 메소드 참조 매뉴얼Process는 더 나은 작업을 수행할 수 있도록 많은 유용한 방법을 제공합니다. 제어 시스템 상호 작용:
Instancemain.js 파일을 생성합니다. 코드는 다음과 같습니다. // 输出当前目录 console.log('当前目录: ' + process.cwd()); // 输出当前版本 console.log('当前版本: ' + process.version); // 输出内存使用情况 console.log(process.memoryUsage()); main.js 파일을 실행합니다. 코드는 다음과 같습니다. $ node main.js 当前目录: /web/com/php/nodejs 当前版本: v0.10.36 { rss: 12541952, heapTotal: 4083456, heapUsed: 2157056 } |