독립된 기능을 갖는 함수, 파일 등을 모아놓은 것
기능별로 모듈을 만들고 필요한 곳에서 이를 호출하여 사용하면 유지보수가 편해진다!
- 내장모듈(기본모듈): NodeJS 내부에서 제공하는 모듈
- 외장모듈(확장모듈): 일반 개발자들이 만들어 놓은 모듈로, npm(node package manager)을 통해 사용 가능
모듈 사용법과 아주아주 기본적인 내장모듈에 대해 알아보자!
const myModule = {};
myModule.plus = function(a, b) {
return a+b;
}
myModule.square = function(a) {
return a*a;
}
module.exports = myModule;
const myModule = require('./myModule');
//require([파일 경로(외장모듈)] or [모듈 이름(내장모듈)])
console.log(myModule.plus(1, 2))
//3
console.log(myModule.square(3))
//9
14.17.0LTS 버전 기준 여기서 확인 가능!
전달인자를 특정한 형식에 넣어서 가공한 문자열을 리턴
🍒 가공형식 문자열에 들어갈 수 있는 대체문자들
%s
- String
%d
- Number(integer, float)
%i
- parseInt
%f
- parseFloat
%j
- JSON
%%
- % sign
util.format('I have %d %s', 4, 'candies')
👉 'I have 4 candies'
util.format('%s = %s', 'name', 'doeun')
👉 'name = doeun'
* 대체문자보다 전달인자가 많은 경우: 남은 인자들은 공백으로 구분해 연결됨
util.formate('I like %s, %s', 'apple', 'cherry', 'blueberry', 'mango')
👉 'I like apple, cherry blueberry mango'
* 대체문자보다 전달인자가 적은 경우: 나머지 대체문자는 변환되지 않음
util.format('I like %s, %s, %s, %s', 'apple', 'cherry')
👉 'I like apple, cherry, %s, %s'
객체의 형식(type)을 확인해 boolean 값 리턴
util.isArray([1, 2, 3])
👉 true
🍒 다시 알아보는 동기&비동기
동기: 해당 작업을 하면서 다른 작업을 동시에 할 수 없음! 다음 작업으로 넘어가려면 해당 작업이 끝날 때까지 기다려야 함
비동기: 해당 작업을 하며 다음 작업을 동시에 수행하며, 해당 작업이 끝나면 매개변수로 전달한 callback 함수가 호출됨
파일 읽기 (비동기 방식)
const fs = require('fs');
fs.readFile('./file.txt', 'utf-8', (err, data) => {
if(error) console.log(error)
else console.log(data)
}
콜백함수는 발생 에러와 읽은 데이터를 각각 첫 번째, 두 번째 인자로 받는다. 에러를 이용해 예외처리를 해 줘야 에러가 발생해도 프로그램이 종료되지 않음!
파일 읽기 (동기 방식)
const fs = require('fs');
const data = fs.readFileSync('./file.txt', 'utf-8');
console.log(data)
기본적으로 이렇게 사용할 수 있고, (콜백함수가 따로 없기 때문에 리턴값을 출력하기 위해서 변수에 담은 것)
예외처리는 다음과 같이 try-catch문으로 할 수 있다.
try {
const data = fs.readFileSync('./file.txt', 'utf-8');
console.log(data);
} catch(error) {
console.log(error)
}
파일 작성하기 (비동기 방식)
const fs = require('fs');
fs.writeFile('./newFile.txt', "Hi I'm doeun", 'utf-8', (error) => {
if(error) console.log(error)
else console.log('done!')
})
콜백함수는 에러를 인자로 받고, 역시 이를 이용해 예외처리를 해 준다.
파일 작성하기 (동기 방식)
const fs = require('fs');
fs.writeFileSync('./newFile.txt', "Hi I'm doeun", 'utf-8');
이렇게 사용하고, 예외처리는 마찬가지로 try-catch 이용
try {
fs.writeFileSync('./newFile.txt', "Hi I'm doeun", 'utf-8');
console.log('done!');
} catch(error) {
console.log(error)
}
server 객체
를 생성하는 메서드
server 객체는 웹 서버를 만들 때 사용하는 객체로, server 객체의 listen(port, [callback]) 메서드를 통해 서버를 실행하고 close([callback]) 메서드를 통해 종료한다.
const http = require('http');
const server = http.createServer();
server.listen(3000, function() {
console.log('서버 실행')
}
createServer의 매개변수로 올 수 있는 callback 함수는, 매개변수로 request 객체
와 response 객체
를 가질 수 있다.
🍒
request 객체
의 메서드method - 클라이언트의 요청 방식
url - 요청 url
heaers - 요청 메세지 header
🍒
response 객체
의 메서드writeHead(statusCode, statusMessage, headers) - 응답 헤더 작성
end(data, encoding, callback) - 응답 본문 작성