노드에 내장된 fs
모듈에 대해 정리합니다
fs는 File System의 약자입니다
const fs = require('fs')
// 내장모듈이기에 바로 불러올 수 있습니다
fs.readFile()
// readFile 메서드는 비동기로 처리됩니다
fs.readFileSync()
// readFileSync 메서드는 동기로 처리됩니다
fs
모듈은 같은 기능의 메서드를 비동기와 동기 방식으로 나눠서 제공합니다
(이름 끝에 'Sync'가 붙으면 동기 메서드, 그렇지 않으면 비동기 메서드입니다)
fs.readFile
const filename = path.join(__dirname, './src/index.html')
// __dirname : ~/Documents/workspace/Node/221212/filesystem + /src/index.html
fs.readFile(filename,'utf8', (err, data)=> {
if(err) console.log("파일을 불러오는데 실패했습니다")
console.log(data)
})
console.log('hello world')
readFile
메서드는 3가지 인자값을 가집니다
첫번째 인자값 : 불러올 파일(절대)경로+파일명 (path모듈을 사용합니다)
두번째 인자값 : 인코딩 방식(Buffer 타입을 text로) ~ 생략 가능합니다
세번째 인자값 : 콜백(파일을 읽었을때 실행할 함수)
readFile
은 비동기로 처리되기 때문에 하단의 hello world가 먼저 출력됩니다
fs.readFileSync
const data = fs.readFileSync(filename, 'utf8')
// readFileSync()는 동기로 처리됩니다
console.log("sync : ",data)
console.log('hello world2')
readFileSync
메서드는 불러올 파일경로(첫 번째)와 인코딩 방식(두 번째)readFileSync
를fs.readdir
fs.readdirSync
해당하는 디렉토리에 담긴 파일목록을 출력하며, 리턴 데이터 타입은 배열입니다
(리눅스 터미널의 ls
명령어와 유사한 역할을 합니다)
마찬가지로 이름에 Sync가 붙어있으면 동기적으로 실행됩니다
const searchPath = path.join(__dirname, 'public')
const dir = fs.readdirSync(searchPath)
// 인자값은 경로입니다
console.log(dir)
// > [ 'css', 'img', 'js' ]
fs.stat
fs.statSync
Stats 객체를 생성하며 지정한 경로에 대한 각종 정보를 출력합니다
fs.stat.isFile()
: 파일인지 아닌지를 boolean 타입으로fs.stat.isDirectory()
는 반대)const find = path.join(searchPath, 'css')
const stat = fs.statSync(find) // object로 리턴
console.log(stat)
// >
// Stats {
// dev: 16777229,
// mode: 16877,
// nlink: 3,
// uid: 501,
// gid: 20,
// ...
// }
const isFile = fs.statSync(find).isFile()
console.log(isFile)
// > Boolean
readdir
, stat
등의 메서드는 라우팅 처리시
미들웨어를 만들기 위해 사용하기도 합니다
[NodeJs]
[NodeJs]
- 내장객체
- global
- process
- Buffer
- __dirname
- __filename
- module
- require
- 내장모듈
- path
- .join(__dirname + 파일경로)
- net
- fs (fileSystem)
- 외장모듈
- express
- Javascript
- 비동기
노드의 자바스크립트는 모듈을 통해 잘게 쪼개어지고
비동기형식의 코드를 주로 사용하는 만큼
콜백이 이루어지는 흐름을 잘 따라가야 합니다