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.js
Hello, World! 안녕하세요, 월드! 안녕하세요, 월드! 안녕하세요, 월드! 안녕하세요, 월드! …

위 프로그램은 2초마다 "Hello, World!"를 출력하며 ctrl + c 버튼을 누를 때까지 영원히 실행됩니다.


console

console은 콘솔 표준 출력을 제공하는 데 사용되며 Internet Explorer의 JScript 엔진에서 제공하는 디버깅 도구이며 점차 브라우저의 사실상 표준이 되었습니다.

Node.js는 이 표준을 따르며 표준 출력 스트림(stdout) 또는 표준 오류 스트림(stderr)에 문자를 출력하는 데 사용되는 일관된 동작을 갖춘 콘솔 개체를 제공합니다.

콘솔 메소드

콘솔 객체의 메소드는 다음과 같습니다.

일련번호메소드 및 설명
1console.log([데이터][, ...])
표준 준수 출력 스트림은 문자를 인쇄하고 개행 문자로 끝납니다. 이 메소드는 여러 개의 매개변수를 받습니다. 매개변수가 하나만 있는 경우 이 매개변수의 문자열 형식이 출력됩니다. 인수가 여러 개인 경우 출력은 C 언어 printf() 명령과 유사한 형식입니다.
2console.info([data][, ...])
P이 명령의 기능은 정보 메시지를 반환하는 것입니다. 이 명령은 Chrome에서만 사용된다는 점을 제외하면 console.log와 크게 다르지 않습니다. 텍스트가 출력되고 나머지 부분에는 파란색 느낌표가 표시됩니다.
3console.error([data][, ...])
출력 오류 메시지입니다. 오류가 발생하면 콘솔에 빨간색 십자가가 표시됩니다.
4console.warn([data][, ...])
경고 메시지를 출력합니다. 콘솔에 노란색 느낌표가 나타납니다.
5console.dir(obj[, options])
은 객체를 검사하고 읽기 쉽고 인쇄 가능한 형식으로 표시하는 데 사용됩니다.
6console.time(label)
출력 시간, 타이밍 시작을 나타냅니다.
7console.timeEnd(label)
End time, 타이밍의 끝을 나타냅니다.
8console.trace(message[, ...])
스택에서 현재 실행되는 코드의 호출 경로입니다. 이 테스트 기능은 원하는 함수에 콘솔을 추가하기만 하면 됩니다. 테스트해 보세요.
9console.assert(value[, message][, ...])
는 표현식이나 변수가 true인지 확인하는 데 사용됩니다. 첫 번째 매개변수는 표현식입니다. 수식에서 두 번째 매개변수는 문자열입니다. 두 번째 매개변수는 첫 번째 매개변수가 false인 경우에만 출력되며, 그렇지 않으면 결과가 없습니다.
console.log(): 표준 출력 스트림에 문자를 인쇄하고 개행 문자로 끝납니다.


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 프로세스 상태를 설명하는 데 사용되는 개체로, 운영 체제와의 간단한 인터페이스를 제공합니다. 일반적으로 로컬 명령줄 프로그램을 작성할 때 이를 처리해야 합니다. 프로세스 객체의 가장 일반적으로 사용되는 멤버 메소드 중 일부가 아래에 소개됩니다.

일련 번호이벤트 및 설명
1exit
프로세스를 종료할 준비가 되면 트리거됩니다.
2beforeExit
이 이벤트는 노드가 이벤트 루프를 지우고 다른 조치가 없을 때 트리거됩니다. 일반적으로 프로세스가 예약되지 않으면 노드가 종료되지만 노드가 계속 실행되도록 'beforeExit' 리스너를 비동기식으로 호출할 수 있습니다.
3uncaughtException
예외가 이벤트 루프로 다시 버블링되면 이 이벤트가 트리거됩니다. 모니터가 예외에 추가되면 기본 동작(스택 추적 인쇄 및 종료)이 발생하지 않습니다.
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

종료 상태 코드

종료 상태 코드는 다음과 같습니다.

상태 코드 이름 및 설명
1Uncaught Fatal Exception
포착되지 않은 예외가 있었고 도메인 또는 uncaughtException 처리기에 의해 처리되지 않았습니다.
2Unused
Reserved
3내부 JavaScript 구문 분석 오류
JavaScript 소스 코드로 인해 Node 프로세스를 시작할 때 구문 분석 오류가 발생합니다. 매우 드물며 Node.js를 개발할 때만 사용할 수 있습니다.
4내부 JavaScript 평가 실패
JavaScript의 소스 코드는 노드 프로세스를 시작하고 평가 중에 함수 실패를 반환합니다. 매우 드물며 Node.js를 개발할 때만 사용할 수 있습니다.
5치명적인 오류
V8의 치명적이고 복구할 수 없는 오류입니다. 일반적으로 stderr에 인쇄되는 내용은 다음과 같습니다: FATAL ERROR
6Non-function Internal Exception Handler
Uncaught 예외, 내부 예외 처리기 함수는 어떻게든 on-function으로 설정되어 호출할 수 없습니다.
7내부 예외 처리기 런타임 실패
발견되지 않은 예외 및 처리 중에 예외 처리기 함수가 예외 자체를 발생시켰습니다. 예를 들어, process.on('uncaughtException') 또는 domain.on('error')이 예외를 발생시키는 경우입니다.
8Unused
Reserved
9잘못된 인수
는 알 수 없는 매개변수가 제공되었거나 제공된 매개변수에 값이 없을 수 있습니다.
10내부 JavaScript 런타임 오류
JavaScript 소스 코드에서 Node 프로세스를 시작할 때 오류가 발생하는 경우는 매우 드물며 Node를 개발할 때만 발생합니다.
12잘못된 디버그 인수
매개변수 --debug 및/또는 --debug-brk가 설정되었지만 잘못된 포트가 선택되었습니다.
>128신호 종료
노드가 SIGKILL 또는 SIGHUP과 같은 치명적인 신호를 수신하는 경우 종료 코드는 128에 신호 코드를 더한 것입니다. 이는 종료 신호 코드가 높은 위치에 있는 표준 Unix 방식입니다.

프로세스 속성

프로세스는 시스템 상호 작용을 더 잘 제어할 수 있도록 돕는 많은 유용한 속성을 제공합니다.

실행 프로그램 'darwin', 'FreeBSD', 'Linux', 'Sunos' 또는 'Win32'require.min 대체 방법의 플랫폼 시스템입니다. 차이점은 런타임 중에 기본 모듈이 변경되면 require.main이 계속해서 이전 모듈을 반환할 수 있다는 것입니다. 둘 다 동일한 모듈을 참조하는 것으로 간주할 수 있습니다.
일련 번호.속성 및 설명
1stdout
표준 출력 스트림.
2stderr
표준 오류 스트림.
3stdin
표준 입력 스트림.
4argv
argv 속성은 명령줄에서 스크립트를 실행할 때 다양한 매개 변수로 구성된 배열을 반환합니다. 첫 번째 멤버는 항상 node이고, 두 번째 멤버는 스크립트 파일 이름이고, 나머지 멤버는 스크립트 파일의 매개변수입니다.
5execPath
현재 스크립트를 실행하는 노드 바이너리의 절대 경로를 반환합니다.
6execArgv
명령줄에서 스크립트를 실행할 때 노드 실행 파일과 스크립트 파일 사이의 명령줄 매개 변수를 멤버로 포함하는 배열을 반환합니다.
7env
현재 쉘의 환경 변수를 멤버로 하는 객체를 반환합니다.
8exitCode
프로세스가 종료될 때의 코드 process.exit. (), 종료 코드를 지정할 필요가 없습니다.
9version
노드 버전(예: v0.10.18).
10versions
노드 버전과 종속성이 포함된 속성
11config
현재 노드 실행 파일을 컴파일하는 데 사용되는 자바스크립트 구성 옵션이 포함된 개체입니다. ./configure 스크립트를 실행하여 생성된 것과 동일한 "config.gypi" 파일입니다.
12pid
현재 프로세스의 프로세스 번호입니다.
13title
프로세스 이름, 기본값은 "노드"이며, 이 값은 사용자 정의할 수 있습니다.
14arch
현재 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는 더 나은 작업을 수행할 수 있도록 많은 유용한 방법을 제공합니다. 제어 시스템 상호 작용:

일련번호방법 및 설명
1abort()
이렇게 하면 노드가 중단 이벤트를 트리거하게 됩니다. 노드가 종료되고 코어 파일이 생성됩니다.
2chdir(directory)
현재 작업 프로세스의 디렉터리를 변경하고 작업이 실패하면 예외를 발생시킵니다.
3cwd()
현재 프로세스의 작업 디렉터리를 반환합니다.
4exit([코드])
지정된 코드를 사용하여 프로세스를 종료합니다. 생략하면 코드 0이 사용됩니다.
5getgid()
프로세스의 그룹 ID를 가져옵니다(getgid(2) 참조). 이름이 아닌 그룹의 숫자 ID를 가져옵니다.
참고: 이 기능은 POSIX 플랫폼(예: Windows 및 Android가 아닌 플랫폼)에서만 사용할 수 있습니다.
6setgid(id)
프로세스의 그룹 ID를 설정합니다(setgid(2) 참조). 숫자로 된 ID나 그룹명을 받을 수 있습니다. 그룹 이름이 지정되면 숫자 ID 확인을 기다리는 것이 차단됩니다.
참고: 이 기능은 POSIX 플랫폼(예: Windows 및 Android가 아닌 플랫폼)에서만 사용할 수 있습니다.
7getuid()
프로세스의 사용자 ID를 가져옵니다(getuid(2) 참조). 이는 사용자 이름이 아닌 숫자로 된 사용자 ID입니다.
참고: 이 기능은 POSIX 플랫폼(예: Windows 및 Android가 아닌 플랫폼)에서만 사용할 수 있습니다.
8setuid(id)
프로세스의 사용자 ID를 설정합니다(setuid(2) 참조). 숫자 ID 또는 문자열 이름을 받습니다. 그룹 이름을 지정하면 숫자 ID로 구문 분석하기를 기다리는 것이 차단됩니다.
참고: 이 기능은 POSIX 플랫폼(예: Windows 및 Android가 아닌 플랫폼)에서만 사용할 수 있습니다.
9getgroups()
프로세스의 그룹 ID 배열을 반환합니다. POSIX 시스템이 이를 가질 것이라는 보장은 없지만 node.js는 이를 보장합니다.
참고: 이 기능은 POSIX 플랫폼(예: Windows 및 Android가 아닌 플랫폼)에서만 사용할 수 있습니다.
10setgroups(groups)
프로세스의 그룹 ID를 설정합니다. 이는 승인된 작업이므로 루트 권한이 있거나 CAP_SETGID 기능이 있어야 합니다.
참고: 이 기능은 POSIX 플랫폼(예: Windows 및 Android가 아닌 플랫폼)에서만 사용할 수 있습니다.
11initgroups(user, extra_group)
/etc/group을 읽고 구성원이 속한 모든 그룹을 사용하여 그룹 액세스 목록을 초기화합니다. 이는 승인된 작업이므로 루트 권한이 있거나 CAP_SETGID 기능이 있어야 합니다.
참고: 이 기능은 POSIX 플랫폼(예: Windows 및 Android가 아닌 플랫폼)에서만 사용할 수 있습니다.
12kill(pid[, signal])
프로세스에 신호를 보냅니다. pid는 프로세스 ID이고 signal은 전송된 신호에 대한 문자열 설명입니다. 신호 이름은 'SIGINT' 또는 'SIGHUP'과 같은 문자열입니다. 생략하면 신호는 'SIGTERM'이 됩니다.
13memoryUsage()
노드 프로세스에서 사용하는 메모리 상태를 바이트 단위로 설명하는 객체를 반환합니다.
14nextTick(callback)
현재 이벤트 루프가 끝나면 함수를 다시 호출하세요.
15umask([mask])
프로세스 파일의 마스크를 설정하거나 읽어옵니다. 하위 프로세스는 상위 프로세스로부터 마스크를 상속받습니다. 마스크 매개변수가 유효하면 이전 마스크가 반환됩니다. 그렇지 않으면 현재 마스크를 반환합니다.
16uptime()
노드가 실행된 시간(초)을 반환합니다.
17hrtime()
현재 프로세스의 고해상도 시간을 [초, 나노초] 배열 형식으로 반환합니다. 과거에 비해 임의적인 사건이다. 이 값은 날짜와 무관하므로 시계 드리프트의 영향을 받지 않습니다. 주요 목적은 정확한 시간 간격을 통해 프로그램의 성능을 측정하는 것입니다.
이전 결과를 현재 process.hrtime()에 전달하면 둘 사이의 시간 차이가 반환되며, 이는 시간 간격을 벤치마킹하고 측정하는 데 사용할 수 있습니다.

Instance

main.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 }