1. os & path
* os
- 운영체제의 정보를 담고 있다.
const os = require('os');
console.log(os.arch()); // x64
console.log(os.platform()); // win32
console.log(os.type()); // Windows_NT
console.log(os.cpus());
// [
// {
// model: 'Intel....',
// speed: 9999,
// // ...
// },
// {//...},
// {//...},
// {//...},
// ]
console.log(os.freemem()); // 123456789
console.log(os.totalmem()); // 1234567890
- os.arch() : prcess.arch와 동일하게 프로세서 아키텍처 정보를 보여준다.
- os.platform() : process.platform과 동일하게 운영체제 플랫폼 정보를 보여준다.
- os.type() : 운영체제의 종류를 보여준다.
- os.cpus() : 컴퓨터의 코어 정보를 보여준다. 이 때 보이는 코어 갯수만큼 서버를 구성할 수 있다.
- os.freemem() : 사용 가능한 메모리(RAM)을 보여준다.
- os.totalmem() : 전체 메모리 용량을 보여준다.
* path
- 경로를 쉽게 조작할 수 있도록 하는 모듈이다.
// path.js
const path = require('path')
const filename = __filename;
console.log(filename); // 'C:\Harry\Practice\path.js
console.log(path.dirname(filename)); // 'C:\Harry\Practice
console.log(path.extname(filename)); // .js
console.log(path.basename(filename)); // path.js
console.log(path.parse(filename))
// {
// root: 'C:\\',
// dir: 'C:\\Harry\\Practice',
// base : 'path.js',
// ext : '.js',
// name : 'path'
// }
console.log(path.format({
dir: 'A:\\Harry\\Practice',
name: 'path',
ext: '.js',
}));
// A:\Harry\Practice\path.js
console.log(path.relative('C:\\Harry\\Practice\\path.js', 'C:\\')); // ..\..\..
console.log(path.join(__dirname,'..','hi.js')); // A:\Documents\GitHub\hi.js
console.log(path.resolve(__dirname,'..','hi.js')) // A:\Documents\GitHub\hi.js
- path.dirname(경로) : 파일이 위치한 폴더 경로를 보여준다.
- path.extname(경로) : 파일의 확장자를 보여준다.
- path.basename(경로, 확장자) : 파일의 이름을 보여준다. 이 때 두 번째 인자로 확장자를 넣어주면 확장자를 제외하고 보여준다.
- path.parse(경로) : 파일 경로를 root, dir, base, ext, name으로 분리하여 객체형태로 보여준다.
- path.format(객체) : parse로 분리된 경로를 합칠 수 있다.
- path.relative(경로, 경로) : 첫 번째 경로에서 두 번째 경로로 가는 방법을 보여준다.
- path.join(경로, ...) : 여러 인자를 받아서 하나의 경로로 합쳐준다. '..' 과 '.'도 알아서 처리해준다.
- path.resolve(경로, ...) : join과 비슷한 역할을 하지만 /를 상대경로가아닌 절대경로로 처리한다.
2. url 모듈
* WHATWG 방식
// url1.js
const url = require('url');
const { URL } = url;
const myURL = new URL('https://haesoo9410.tistory.com/191?category=880541');
console.log(myURL);
console.log(url.format(myURL));
// URL {
// href: 'https://haesoo9410.tistory.com/191?category=880541',
// origin: 'https://haesoo9410.tistory.com',
// protocol: 'https:',
// username: '',
// password: '',
// host: 'haesoo9410.tistory.com',
// hostname: 'haesoo9410.tistory.com',
// port: '',
// pathname: '/191',
// search: '?category=880541',
// searchParams: URLSearchParams { 'category' => '880541' },
// hash: ''
// }
// https://haesoo9410.tistory.com/191?category=880541
- url 모듈 안에는 URL 생성자가 있다. 이 생성자에 주소를 넣어 객체를 만들면 주소가 부분별로 정리된다.
- WHATWG 방식이므로 username, password, origin, searchParams 속성이 있다.
- searchParams는 WHATWG 방식에서 쿼리스트링 부분 처리를 도와준다. 위의 주소에서 ? 뒷 부분을 의미한다. 위의 예시를 예로 들면 myURL.searchParams.keys() 와 같이사용한다. 메서드들은 다음과 같다.
- getAll(key) : 키에 해당하는 모든 값들을 가져온다.
- get(key) : 키에 해당하는 첫 번째 값을 가져온다.
- has(key) : 해당 키가 있는지 검사한다.
- delete(키) : 해당 키를 제거한다.
- keys() : searchParams의 모든 키를 이터레이터객체로 가져온다.
- values() : searchParams의 모든 값을 이터레이터객체로 가져온다.
- append(키, 값) : 해당 키를 추가한다. 만일 이미 있다면 하나 더 추가한다.
- set(키, 값) : 같은 키의 값들을 모두 지우고 새로 추가한다.
- toString() : 조작한 searchParams객체를 다시 문자열로 만들며, 이를 search에 대입하면 주소 객체에 반영된다.
* 기존 노드 방식
// url2.js
const url = require('url');
const parseUrl = url.parse('https://haesoo9410.tistory.com/191?category=880541');
console.log(parseUrl);
console.log(url.format(parseUrl));
// Url {
// protocol: 'https:',
// slashes: true,
// auth: null,
// host: 'haesoo9410.tistory.com',
// port: null,
// hostname: 'haesoo9410.tistory.com',
// hash: null,
// search: '?category=880541',
// query: 'category=880541',
// pathname: '/191',
// path: '/191?category=880541',
// href: 'https://haesoo9410.tistory.com/191?category=880541'
// }
// https://haesoo9410.tistory.com/191?category=880541
- url.parse(주소) 를 사용하여 주소를 분리한 객체를 만들어 낼 수 있다. WHATWG 방식과 달리 username과 password없이 auth가 존재하며, searchParams 대신 query가 있다.
- url.format은 동일하게 사용할 수 있다.
- 기존 노드 방식은 쿼리스트링을 querystring모듈로 처리한다.
// url3.js
const url = require('url');
const querystring = require('querystring');
const parseUrl = url.parse('https://haesoo9410.tistory.com/191?category=880541&test=harrytest');
const query = querystring.parse(parseUrl.query);
console.log(query);
// [Object: null prototype] { category: '880541', test: 'harrytest' }
console.log(querystring.stringify(query));
// category=880541&test=harrytest
- querystring.parse(쿼리) : url의 쿼리부분을 객체로 분해한다.
- querystring.stringify(객체) : 분해된 쿼리객체를 문자열로 조립한다.
3. 파일 시스템
* fs
- fs는 파일 시스템에 접근하는 모듈이다. 이를 이용해서 파일이나 폴더를 생성하거나 삭제, 읽기, 쓰기가 가능하다.
const fs = require('fs');
fs.readFile('./readtext.txt', (err, data) => {
if (err) {
throw err;
}
console.log(data);
console.log(data.toString());
});
// <Buffer ed 85 8d ec 8a a4 ed 8a b8 20 ec 9d bd ea b8 b0 20 ec 98 88 ec a0 9c>
// 텍스트 읽기 예제
- toString메서드로 버퍼를 문자열로 변경해주었다.
* fs 프로미스
- 위는 콜백 방식이므로 콜백지옥에 빠질 위험이 있다. 프로미스 방식을 사용해보자. 간단하게 뒤에 promises를 붙이기만 하면 프로미스를 반환하도록 만들어져있다.
- 이번 예시에서는 파일을 쓰고 읽는 예시이다.
const fs = require('fs').promises;
fs.writeFile('./writetext.txt', '텍스트 쓰기 예제')
.then(() => {
return fs.readFile('writetext.txt');
})
.then((data) => {
console.log(data.toString());
})
.catch((err) => {
console.error(err);
})
// 텍스트 쓰기 예제
* 기타메서드
- fs.access(경로, 옵션, 콜백) : 폴더나 파일에 접근할 수 있는지를 체크한다.
- fs.mkdir(경로, 콜백) : 폴더를 만든다. 이미 폴더가 있으면 에러가 발생하므로 access메서드를 먼저 호출해서 확인하자.
- fs.open(경로, 옵션, 콜백) : 파일의 아이디(fd 변수) 를 가져온다. 파일이 없으면 생성하고 아이디를 가져온다. 이 아이디를 이용하여 fs.read()나 fs.write()로 읽거나 쓸 수 있다. 두 번째 인자로 동작을 명시할 수 있다. 'w'(쓰기), 'r'(읽기), 'a'(추가) 를 사용한다.
- fs.rename(기존 경로, 새 경로, 콜백) : 파일의 이름을 바꾼다. 같은 폴더일 필요는 없으므로 잘라내기 같은 역할도 가능하다.
- fs.readdir(경로, 콜백) : 폴더 내부의 파일과 폴더를 배열로 확인할 수 있다.
- fs.unlink(경로, 콜백) : 파일을 지울 수 있다.
- fs.rmdir(경로, 콜백) : 폴더를 지울 수 있다. 폴더 내에 파일이 있으면 에러가 발생한다.
참고
문서 | Node.js
Node.js® is a JavaScript runtime built on Chrome's V8 JavaScript engine.
nodejs.org
[리뉴얼] Node.js 교과서 - 기본부터 프로젝트 실습까지 - 인프런 | 강의
노드가 무엇인지부터, 자바스크립트 최신 문법, 노드의 API, npm, 모듈 시스템, 데이터베이스, 테스팅 등을 배우고 5가지 실전 예제로 프로젝트를 만들어 나갑니다. 최종적으로 클라우드에 서비스
www.inflearn.com
'Server > Node.js' 카테고리의 다른 글
<Node> M1 Mac에서 Rosetta로 노드 패키지 설치하기 (0) | 2022.06.14 |
---|---|
<노드JS> http 서버 만들기 (0) | 2021.07.17 |
<노드JS> 노드 내장 객체 (0) | 2021.07.16 |
<노드JS> 노드 JS란 (0) | 2021.07.15 |