Node.js 교과서 2장을 공부하고
⚠️ 본 포스팅은 매주 Node.js를 공부하고, 동아리 스터디원들과 함께 스터디한 내용을 정리하는 곳입니다.
⚠️ 모든 내용을 기록하려고 하기 보다는 함축하고 필요한 내용만 작성하고 있습니다.
https://github.com/gilbutITbook/080229
var, const, let
- var 사용하지 말기 (혼란을 야기함)
- const, let 사용
- const: 한번 값을 할당하면 변경 불가
- let: 변수로 사용 (스코프 적용)
템플릿 문자열
- 백틱(`) 을 통해서 문자열 합치기 `${num} 안녕`
객체 리터럴
var sayNode = function () {
console.log('Node');
};
var es = 'ES';
const newObject = {
sayJS() {
console.log('JS');
},
sayNode,
[es + 6]: 'Fantastic',
};
newObject.sayNode(); // Node
newObject.sayJS(); // JS
console.log(newObject.ES6); // Fantastic
- : function() 생략가능
- 필드명과 변수명이 동일하면 한번만 써도됨
- 안에서 속성명을 동적으로 생성해서 값을 추가가능
화살표 함수
var relationship1 = {
name: 'zero',
friends: ['nero', 'hero', 'xero'],
logFriends: function () {
var that = this; // relationship1을 가리키는 this를 that에 저장
this.friends.forEach(function (friend) {
console.log(that.name, friend);
});
},
};
relationship1.logFriends();
const relationship2 = {
name: 'zero',
friends: ['nero', 'hero', 'xero'],
logFriends() {
this.friends.forEach(friend => {
console.log(this.name, friend);
});
},
};
relationship2.logFriends();
- 화살표 함수의 this는 부모의 스코프를 물려받음.
- 기본적으로 화살표 함수를 사용하자.
구조분해 할당
const candyMachine = {
status: {
name: 'node',
count: 5,
},
getCandy() {
this.status.count--;
return this.status.count;
},
};
const { getCandy, status: { count } } = candyMachine;
const array = ['nodejs', {}, 10, true];
const [node, obj, , bool] = array;
- 위의 문법 처럼 쪼개서 변수에 할당 가능
프로미스
콜백 버전
function findAndSaveUser(Users) {
Users.findOne({}, (err, user) => { // 첫 번째 콜백
if (err) {
return console.error(err);
}
user.name = 'zero';
user.save((err) => { // 두 번째 콜백
if (err) {
return console.error(err);
}
Users.findOne({ gender: 'm' }, (err, user) => { // 세 번째 콜백
// 생략
});
});
});
}
프로미스 버전
function findAndSaveUser(Users) {
Users.findOne({})
.then((user) => {
user.name = 'zero';
return user.save();
})
.then((user) => {
return Users.findOne({ gender: 'm' });
})
.then((user) => {
// 생략
})
.catch(err => {
console.error(err);
});
}
- 콜백 버전의 경우에는 뎁스가 깊어지고 에러를 따로 처리해야함
- 프로미스 객체로 가져가면 .then 처리로 일정한 뎁스로 에러처리가 한번에 가능해짐
const promise1 = Promise.resolve('성공1');
const promise2 = Promise.resolve('성공2');
Promise.all([promise1, promise2])
.then((result) => {
console.log(result); // ['성공1', '성공2'];
})
.catch((error) => {
console.error(error);
});
한번에 처리도 가능
async await
프로미스 코드
function findAndSaveUser(Users) {
Users.findOne({})
.then((user) => {
user.name = 'zero';
return user.save();
})
.then((user) => {
return Users.findOne({ gender: 'm' });
})
.then((user) => {
// 생략
})
.catch(err => {
console.error(err);
});
}
async await 코드
const findAndSaveUser = async (Users) => {
try {
let user = await Users.findOne({});
user.name = 'zero';
user = await user.save();
user = await Users.findOne({ gender: 'm' });
// 생략
} catch (error) {
console.error(error);
}
};
- .then 대신 async await로 처리 가능
- 에러 처리는 try catch로