Path
const path = require('path'); const { parse } = require('path/posix'); console.log(__dirname); // 포함된 디렉토리 이름 (/Users/minseong/Desktop/git/nodejs/9-path) console.log(__filename); // 포함된 파일이름 포함 (/Users/minseong/Desktop/git/nodejs/9-path/app.js) console.log(path.sep); // 각 운영체제별 경로 구분자 출력 (window :\\ , UNIX : /) console.log(path.delimiter); // 환경변수 구분자 // basename console.log(path.basename(__filename)); // 파일 이름 출력 (app.js) console.log(path.basename(__filename, '.js')); // 파일 이름만 출력 (app) // dirname console.log(path.dirname(__filename)); // 디렉토리 이름 (/Users/minseong/Desktop/git/nodejs/9-path) //extension console.log(path.extname(__filename)); // 확장자만 (.js) //parse const parsed = path.parse(__filename); /* { root: '/', dir: '/Users/minseong/Desktop/git/nodejs/9-path', base: 'app.js', ext: '.js', name: 'app' } */ const str = path.format(parsed); console.log('str=> ',str); // str=> /Users/minseong/Desktop/git/nodejs/9-path/app.js // isAbsolute console.log('isAbsolute?', path.isAbsolute(__dirname)); // 절대 경로인지 확인 console.log('isAbsolute?',path.isAbsolute('../')); // normalize console.log(path.normalize('./folder//////sub')); // 잘못된 경로를 수정해줌 // join console.log(__dirname + path.sep + 'image'); // os별 대응을 위해 '/' 대신 path.sep 을 씀 console.log(path.join(__dirname,'image')); // 현디렉토리에 image라는 경로 생성
File
const fs = require('fs'); const { deflateSync } = require('zlib'); // 모든 API는 3가지 형태로 제공된다. // 1. rename (...., callback(error,data)) >> 비동기, 필요한 인자와 콜백함수를 전달하면, 필요한 일을 다 진행한 다음 등록한 콜백함수를 호출해준다. // 2. try {renameSync(....) } catch(e) { } >> Sync는 따로 콜백함수를 전달하지 않는다. 해당 구문에 에러가 있다면 다음 코드가 실행되지 않으므로(어플리케이션 죽음) 항상 try catch 문으로 감싸야한다. // 3. promises.rename().then().catch(0) >> 비동기 //fs.renameSync('./file.txt', './file-new.txt'); // 안좋은 예 : file.txt 파일을 찾을 수 없어, error 로 다음 구문으로 넘어가지않음 try { fs.renameSync('./text.txt','./text-new.txt'); } catch (error) { console.error(error); } // try catch구문으로, 에러가 발생했더라도 다음 코드 라인이 실행되도록 해줌 fs.rename('./text-new.txt','./text.txt',(error)=>{console.log(error);}); fs.promises .rename('./text2.txt','./text-new.txt') .then(()=> console.log('Done')) // 문제가 없을때 동작 입력 .catch((error)=>{console.log(error);}); // 에러 발생시 동작 입력
파일 시스템 모듈에서 Sync(동기)는 사용하지 않는 것이 좋다. 동작이 끝날때까지 다음줄로 넘어가지 않고, 에러가 발생했을때 아예 노드 어플리케이션이 죽어버리기 때문이다.
비동기식인 callback 으로 전달하던지, promises 형태로 처리하는게 가장 좋다.
const fs = require('fs').promises; // import * as fs1 from 'fs'; // read a file fs.readFile('./text.txt','utf-8') .then((data)=>{console.log(data)}) .catch((console.error)); // write a file fs.writeFile('./text.txt','Hello, world~~!! :) ') // .catch(console.error); // append text to the file fs.appendFile('./text.txt','Hello, world~~!! :) ') .then(()=>{ fs.copyFile('./text.txt','./text2.txt') // 텍스트가 추가된 다음 카피가 일어나게하기 위해(비동기는 순차적으로 될수도 있고 안될 수도 있기 때문) .catch(console.error); }) .catch(console.error); // copy fs.copyFile('./text.txt','./text2.txt') .catch(console.error); // make a folder fs.mkdir('sub-folder') .catch(console.error); fs.readdir('./') //현재 경로에 있는 모든 파일을 읽어옴 .then(console.log) .catch(console.error);