티스토리 뷰
ES2015(ES6) 등장
최신 문법 몇가지
1. const, let
2. 템플릿 문자열
3. 객체 리터럴
4. 화살표 함수
5. 구조분해 할당
6. 클래스
7. 프로미스
1 프로미스 예제1
const condition = true; // true면 resolve, false면 reject
const promise = new Promise((resolve, reject) => {
if (condition) {
resolve('성공');
} else {
reject('실패');
}
});
// 다른 코드가 들어갈 수 있음
promise
.then((message) => {
console.log(message); // 성공(resolve)한 경우 실행
})
.catch((error) => {
console.error(error); // 실패(reject)한 경우 실행
})
.finally(() => { // 끝나고 무조건 실행
console.log('무조건');
});
2 프로미스 예제2
promise
.then((message) => {
return new Promise((resolve, reject) => {
resolve(message);
});
})
.then((message2) => {
console.log(message2);
return new Promise((resolve, reject) => {
resolve(message2);
});
})
.then((message3) => {
console.log(message3);
})
.catch((error) => {
console.error(error);
});
3 원래 식(db에서 가져오는거
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) => { // 세 번째 콜백
// 생략
});
});
});
}
4 위에 식 promise로
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);
});
}
5 Promise.all
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);
});
8. async/await
1 promise도 복잡해
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);
});
}
2 await 사용 + try catch
async function findAndSaveUser(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);
}
}
3 화살표 함수도 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);
}
};
4 for wait of문으로 프로미스 배열 순회
const promise1 = Promise.resolve('성공1');
const promise2 = Promise.resolve('성공2');
(async () => {
for await (promise of [promise1, promise2]) {
console.log(promise);
}
})();
사용
async function findAndSaveUser(Users) {
// 생략
}
findAndSaveUser().then(() => { /* 생략 */ });
// 또는
async function other() {
const result = await findAndSaveUser();
}
프런트엔드 자바스크립트
1. AJAX
2. formData(HTML form 태그의 데이터를 동적으로 제어할 수 있는 기능)
3. encodeURIComponent, decodeURIComponent
AJAX 요청을 보낼 때 주소에 한글이 들어가는 경우가 있다. 서버에 따라 한글 주소를 일해하지 못하는 경우가 있는데, 이 때는 window 객체의 메서드인 encodeURIComponent 메서드를 사용한다. 받는 쪽에서는 decodeURIComponent를 사용하면 된다.
(async () => {
try {
const result = await axios.get(`https://www.zerocho.com/api/search/${encodeURIComponent('노드')}`);
console.log(result);
console.log(result.data); // {}
} catch (error) {
console.error(error);
}
})();
decodeURIComponent('%wes2123~~~');
4. 데이터 속성과 dataset
프런트엔드에 데이터를 내려보낼 때 첫번째로 고려해야 할 점은 보안이기 때문에 민감한 데이터를 내려보내면 안된다. 보안과 무관한 데이터들은 자유롭게 프런트엔드로 보내도 된다. 자스 변수에 저장해도 되지만 데이터 속성을 이용하는 것이 좋다.
<ul>
<li data-id="1" data-user-job="programmer">Zero</li>
<li data-id="2" data-user-job="designer">Nero</li>
<li data-id="3" data-user-job="programmer">Hero</li>
<li data-id="4" data-user-job="ceo">Kero</li>
</ul>
<script>
console.log(document.querySelector('li').dataset);
// { id: '1', userJob: 'programmer' }
</script>
데이터 속성의 장점 : 자스로 쉽게 접근할 수 있다.
불러올 때 data-접두어가 사라지고 -뒤에 위치한 글자는 대문자가 된다.
역으로 dataset.monthSalary=1000; 을 넣으면
data-month-salary="1000"이라는 속성이 생긴다.
'책 > nodejs 교과서' 카테고리의 다른 글
6. 익스프레스 웹 서버 만들기 (0) | 2021.02.21 |
---|---|
5. 패키지 매니저 (0) | 2021.02.20 |
4. http 모듈로 서버 만들기 (0) | 2021.02.20 |
3. 노드 기능 알아보기 (0) | 2021.02.19 |
1. 노드 시작하기 (0) | 2021.02.18 |