해당 글은 Node.js 교과서의 내용을 요약, 정리한 글입니다.
Read, Eval, Print, Loop의 약자로, 브라우저의 콘솔 탭과 같이 노드에서 지원하는 콘솔이다.
하지만 역시 JS파일로 만들어 실행하는 것이 편하다.
$node [자바스크립트 파일 경로] 로 실행할 수 있다.
확장자는 생략해도 되며, 콘솔에서 입력해야 한다.
//var.js
const odd = '홀수입니다';
const even = '짝수입니다';
module.exports = {
odd,
even,
};
//func.js
const { odd, even } = require('./var');
function checkOddOrEven(num){
if(num % 2){
return odd;
}
return even;
}
module.exports = checkOddOrEven;
//index.js
const { odd, even } = require('./var');
const checkNumber = require('./func');
function checkStringOddOrEven(str){
if(str.length % 2){
return odd;
}
return even;
}
이러한 방식으로 만들어진 모듈을 사용할 수 있다.
ES2015가 도입되면서 자체 모듈 시스템 문법이 생겼다.
확장자는 mjs지정해야 한다.
전역 객체이므로 모든 파일에서 접근할 수 있다.
require 함수도 global.require함수에서 global이 생략된 형태이다.
//globalA.js
module.exports = () =>global.message;
//globalB.js
const A = require('./globalA');
global.message = '안녕하세요';
console.log(A());
globalB에서 넣은 global.message값을 globalA에서도 접근할 수 있다.
노드에서는 console이 global객체 안에 들어 있다.
console은 보통 디버깅을 위해 사용한다.
console의 대표적인 명령어는 다음과 같다.
console.time('레이블')
console.timeEnd('레이블')
//console.time과 console.timeEnd사이의 시간 차이를 알려줌.
console.log()
//아시죠?
console.error(에러 내용)
//에러를 콘솔에 표시합니다
console.table(배열)
//배열의 요소로객체 리터럴을 넣으면 객체의 속성들이 테이블 형식으로 표현된다.
console.dir(객체, 옵션)
//객체를 콘솔에 표시할 때 사용
//옵션에 colors를 true로 하면 보기 편해진다.
console.trace(레이블)
//에러가 어디서 발생했는지 추적할 수 있게 한다.
타이머 기능을 제공하는 함수들은 노드에서 window 대신 global 객체 안에 들어있다.
setTimeout(콜백 함수, 밀리초)
//주어진 밀리초 이후에 콜백 함수를 실행한다.
setInterval(콜백 함수, 밀리초)
//주어진 밀리초마다 콜백 함수를 반복 실행한다.
setImmediate(콜백 함수)
//콜백 함수를 즉시 실행한다.
타이머 함수들은 모두 아이디를 반환한다. 아이디를 사용하여 타이머를 취소할 수 있다.
clearTimeout(아이디)
//setTimeout을 취소한다.
clearInterval(아이디)
//setInterval을 취소한다.
clearImmediate(아이디)
//setImmediate를 취소한다.
노드 파일에서는 파일 사이에 모듈 관계가 있는 경우가 많다. 때로는 현재 파일의 경로나 파일명을 알아야 한다.
노드는 __filename와 __dirname으로 경로에 대한 정보를 제공한다.
module.exports에서 module객체 말고 exports객체로도 모듈을 만들 수 있다.
//var.js
exports.odd = '홀수입니다';
exports.even = '짝수입니다';
이러한 코드가 동작하는 이유는 module.exports와 exports가 같은 객체를 참조하기 때문이다.
require와 exports는 코드 어디에서도 사용할 수 있다.
하지만 한 번 require한 파일은 require cache에 저장되므로 다음 번에 require 할 때는 새로 불러오지 않고 require.cache에 있는 것이 재사용된다.
만약 새로 require하길 원한다면 require.cache의 속성을 제거하면 된다.
다만, 순환 참조의 경우에는 순환 참조되는 대상을 빈 객체로 만든다.
이때 에러가 발생하지 않고 조용히 빈 객체로 변경되므로 예기치 못한 동작이 발생할 수 있다.
현재 실행되고 있는 노드 프로세스에 대한 정보를 담고 있다.
process.version
//설치된 노드의 버전
process.arch
//프로세서 아키텍쳐 정보
process.platform
//운영체제 플랫폼 정보
process.pid
//현재 프로세스의 아이디, 프로세스를 여러 개 가질 때 구분할 수 있음.
process.uptime()
//프로세스가 시작된 후 흐른 시간, 단위는 초임
process.execPath
//노드의 경로
process.cwd()
//현재 프로세스가 실행되는 위치
process.cpuUsage()
//현재 cpu 사용량
process.env
//시스템의 환경 변수
const secretId = process.env.SECRET_ID;
const secretCode = process.env.SECRET_CODE;
process.nextTick(콜백)
//이벤트 루프가 다른 콜백 함수들보다 nextTick의 콜백 함수를 우선으로 처리하도록 만든다.
process.exit(코드)
실행 중인 노드 프로세스를 종료한다.
서버 환경에서 이 함수를 사용하면 서버가 멈추므로, 서버에서는 잘 사용하지 않고 서버 외의 독립적인 프로그램에서 수동으로 노드를 멈추기 위해 사용한다.
웹 브라우저에 사용되는 자바스크립트는 운영체제의 정보를 가져올 수 없지만, 노드는 os모듈에 대한 정보가 담겨 있어 정보를 가져올 수 있다.
os.arch()
//process.arch()와 동일함.
os.platform()
//process.platform()과 동일함.
os.type()
//운영체제의 종류를 보여준다.
os.uptime()
//운영체제 부팅 이후 흐른 시간을 보여준다. process.uptime()은 노드의 실행시간이므로 둘이 다르다.
os.hostname()
//컴퓨터의 이름을 보여준다.
os.release()
//운영체제의 버전을 보여준다.
os.hostdir()
//디렉터리 경로를 보여준다.
os.tmpdir()
//임시 파일 저장 경로를 보여준다.
os.cpus()
//컴퓨터의 코어 정보를 보여준다.
os.freemem()
//사용 가능한 메모리를 보여준다.
os.totalmem()
//전체 메모리 용량을 보여준다.
폴더와 파일의 경로를 쉽게 조작하도록 도와주는 모듈.
path 모듈이 필요한 이유 중 하나는 운영체제별로 경로 구분자가 다르기 때문이다.
윈도우에서는 \로 구분한다.
맥이나 리눅스에서는 /로 구분한다.
path.sep
//경로의 구분자, 윈도우는\, POSIX는 /이다.
path.delimiter
//환경 변수의 구분자, 윈도우는;, POSIX는 :이다.
path.dirname(경로)
//파일이 위치한 폴더 경로를 보여 준다.
path.extname(경로)
//파일의 확장자를 보여 준다.
path.basename(경로, 확장자)
//파일의 이름을 표시한다.
path.parse(경로)
//파일 경로를 root, dir, base, ext, name으로 분리한다.
path.format(객체)
//path.parse()한 객체를 파일 경로로 합친다.
path.normalize(경로)
//\나/를 여러번 사용했거나 혼용했을 경우 정상적인 경로로 변환한다.
path.isAbsolute(경로)
//파일의 경로가 절대경로인지 상대경로인지를 true나 false로 알린다.
path.relative(기존경로, 비교경로)
//경로를 두 개 넣으면 첫 번째 경로에서 두 번째 경로로 가는 방법을 알린다.
path.join(경로, ...)
//여러 인수를 넣어 하나의 경로로 합친다.
path.resolve(경로, ...)
//path.join()과 비슷하다.
인터넷 주소를 쉽게 조작하도록 도와주는 모듈