브라우저에서는 <script src="something.js"></script>
와 같이 script 태그를 이용했지만, node.js 에서는 js코드 상단에 require
구문을 이용하는 것으로 모듈을 가져올 수 있다.
const fs = require('js') // file system module 을 불러온다.
const dns = require('dns') // DNS module 을 불러온다
node.js 에서 공식적으로 제공하지 않는 서드파티 모듈을 사용하기 위해서는 우선 설치를 해야 한다.
$ npm install underscore
가령 서드파티 모듈인 underscore 를 가져와 사용하고 싶다면, 위 명령어를 입력해 우선 내 로컬에 설치는 하고, 그 다음 require 구문을 이용해 가져와 사용할 수 있다.
const underscore = require('underscore');
const fs = require("fs");
// getDataFromFile함수(이하 get함수) 가 전달받는 2개의 인자 확인
const getDataFromFile = function (filePath, callback) {
// filePath 에 있는 파일을 utf-8 형식으로 조회한다.
// 조회에 성공하면 그 내용이 data 인자에 담기고, 조회할 수 없는 경우 익명함수 err를 던질 수 있음
fs.readFile(filePath, "utf8", (err, data) => {
if (data === undefined) {
// 조회에 실패한 경우 data 는 null 이고, err 를 첫 번째 인자로 하여 callback 호출
callback(err, null);
} else {
// 조회에 성공한 경우 err 는 null 이고, data 를 두 번째 인자로 하여 callback 호출
callback(null, data);
}
});
};
// "README.md" 가 filePath, 화살표함수가 callback 함수
getDataFromFile("README.md", (err, data) => {
// 이하의 함수내용이 callback 인자로 넘어감
if (err) {
console.log(err);
} else {
console.log(data);
}
});
// filePath 인자를 받아서 2줄 아래 readFile 함수의 인자로 갖다 쓸거임
const getDataFromFilePromise = (filePath) => {
// filePath 열람 성공 시 .then 메소드에 data를 넘기고, 실패 시 err 넘김
return new Promise((resolve, reject) => {
fs.readFile(filePath, "utf8", (err, data) => {
if (data === undefined) {
reject(err);
} else {
resolve(data);
}
});
});
};
getDataFromFilePromise('README.md').then(data => console.log(data));
const path = require("path");
const { getDataFromFilePromise } = require("./02_promiseConstructor");
const user1Path = path.join(__dirname, "files/user1.json");
const user2Path = path.join(__dirname, "files/user2.json");
const readAllUsersChaining = () => {
// 꼬리를 잇는 then의 data 에 각각 어떤 값이 전달되는지가 포인트
return new Promise((resolve, reject) => {
let result = [];
getDataFromFilePromise(user1Path)
// 여기서 data 는 get 함수의 호출결과인 user1Path의 내용을 담은 data
.then((data) => {
result.push(JSON.parse(data));
return getDataFromFilePromise(user2Path);
})
// 위 then에서 user2Path 의 data를 반환하므로 아래 data에는 해당 반환값이 전달됨
.then((data) => {
result.push(JSON.parse(data));
// resolve 를 호출함으로써 result 를 반환하면서 Promise함수 종료
resolve(result);
});
});
};
readAllUsersChaining();