일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- 홈트
- 메디패치
- 러닝
- 달리기
- node.js
- axios
- 박스점프
- JavaScript
- 독서 리뷰
- github
- 크로스핏
- 걷기
- git
- SQL
- Udemy
- code kata
- 활동 킬로칼로리
- dml
- Til
- node
- MySQL
- 월별 운동일지
- 드림코딩
- 습윤밴드
- wecode
- 위코드
- nodejs
- dql
- 운동일지
- express
- Today
- Total
RISK IT
[TIL11_23.1.19.] [Node] Express 초기 환경세팅 중 javascript 및 typeorm 구문 분석 본문
[TIL11_23.1.19.] [Node] Express 초기 환경세팅 중 javascript 및 typeorm 구문 분석
nomoremystery 2023. 1. 19. 13:12Javasciprt 구문 분석
전체 소스코드
// third-party module
require('dotenv').config(); // 환경변수 사용
const express = require('express');
const cors = require('cors');
const morgan = require('morgan');
const { DataSource } = require('typeorm');
const mysqlDataSource = new DataSource({
type: process.env.TYPEORM_CONNECTION,
host: process.env.TYPEORM_HOST,
port: process.env.TYPEORM_PORT,
username: process.env.TYPEORM_USERNAME,
password: process.env.TYPEORM_PASSWORD,
database: process.env.TYPEORM_DATABASE,
});
mysqlDataSource
.initialize()
.then(() => {
console.log('Data Source has been initialized!');
})
.catch((err) => {
console.error('Error during Data Source initialization', err);
mysqlDataSource.destroy();
});
const app = express();
const PORT = process.env.PORT;
app.use(cors());
app.use(morgan('dev'));
app.use(express.json());
// health check
app.get('/ping', (req, res) => {
res.status(200).json({ message: 'pong' });
});
const start = async () => {
try {
app.listen(PORT, () => console.log(`Server is listening on ${PORT}!!`));
} catch (err) {
console.error(err);
}
};
start();
Javascript 구문 분석
// third-party module
require('dotenv').config(); // 환경변수 사용
const express = require('express');
const cors = require('cors');
const morgan = require('morgan');
const { DataSource } = require('typeorm');
// built-in module, custom module은 없으니 생략
모듈은 built-in module
, third-party module
, custom module
이 존재한다.
모듈의 순서를 조정하여 코드의 가독성을 높일 수 있다.
built-in module
third-party module
custom module
const mysqlDataSource = new DataSource({
// 변수명 변경
type: process.env.TYPEORM_CONNECTION,
host: process.env.TYPEORM_HOST,
port: process.env.TYPEORM_PORT,
username: process.env.TYPEORM_USERNAME,
password: process.env.TYPEORM_PASSWORD,
database: process.env.TYPEORM_DATABASE,
});
mysqlDataSource의 변수명을 원래의 myDataSource에서 변경하였다.
"my"라는 용어는 예제 코드에서는 사용할 수 있으나 실제 코드에서는 피해야 하기 때문이다.
const start = async () => {
try {
app.listen(PORT, () => console.log(`Server is listening on ${PORT}!!`));
} catch (err) {
console.error(err);
}
};
start(); // 에러 출력 실행
console.error()
console.error()
메서드는 웹 콘솔에 에러 메시지를 출력한다.
try...catch
동작 알고리즘
- 먼저, try {...} 안의 코드가 실행됩니다.
- 에러가 없다면, try 안의 마지막 줄까지 실행되고, catch 블록은 건너뜁니다.
- 에러가 있다면, try 안 코드의 실행이 중단되고, catch(err) 블록으로 제어 흐름이 넘어갑니다. 변수 err(아무 이름이나 사용 가능)는 무슨 일이 일어났는지에 대한 설명이 담긴 에러 객체를 포함합니다.
Promise
Promise
객체는 비동기 작업이 맞이할 미래의 완료 또는 실패와 그 결과 값을 나타냅니다.Promise
는 프로미스가 생성된 시점에는 알려지지 않았을 수도 있는 값을 위한 대리자로, 비동기 연산이 종료된 이후에 결과 값과 실패 사유를 처리하기 위한 처리기를 연결할 수 있습니다. 프로미스를 사용하면 비동기 메서드에서 마치 동기 메서드처럼 값을 반환할 수 있습니다. 다만 최종 결과를 반환하는 것이 아니고, 미래의 어떤 시점에 결과를 제공하겠다는 '약속'(프로미스)을 반환합니다.Promise
는 다음 중 하나의 상태를 가집니다.
- 대기(pending): 이행하지도, 거부하지도 않은 초기 상태.
- 이행(fulfilled): 연산이 성공적으로 완료됨.
- 거부(rejected): 연산이 실패함.
대기 중인 프로미스는 값과 함께 이행할 수도, 어떤 이유(오류)로 인해 거부될 수도 있습니다. 이행이나 거부될 때, 프로미스의 then 메서드에 의해 대기열(큐)에 추가된 처리기들이 호출됩니다. 이미 이행했거나 거부된 프로미스에 처리기를 연결해도 호출되므로, 비동기 연산과 처리기 연결 사이에 경합 조건은 없습니다.
async function
function 앞에 async를 붙이면 해당 함수는 항상 프라미스를 반환합니다. 프라미스가 아닌 값을 반환하더라도 이행 상태의 프라미스(resolved promise)로 값을 감싸 이행된 프라미스가 반환되도록 합니다.
TypeORM 구문분석
const { DataSource } = require('typeorm');
const mysqlDataSource = new DataSource({
type: process.env.TYPEORM_CONNECTION,
host: process.env.TYPEORM_HOST,
port: process.env.TYPEORM_PORT,
username: process.env.TYPEORM_USERNAME,
password: process.env.TYPEORM_PASSWORD,
database: process.env.TYPEORM_DATABASE,
});
mysqlDataSource
.initialize()
.then(() => {
console.log('Data Source has been initialized!');
})
.catch((err) => {
console.error('Error during Data Source initialization', err); // 에러 메시지와 에러 출력
mysqlDataSource.destroy();
});
Creating a new DataSource
새로운 DataSource 인스턴스를 만들기 위해, 새로운 데이터 소스를 호출하고 전역 변수에 사용할 애플리케이션을 할당함으로써 constructor를 초기화해야 한다.
initialize()
.initialize()
는 데이터 소스를 초기화하고 데이터베이스로의 연결 풀을 오픈한다.
then()과 catch()
.then()
은 promise
의 resolvePromise
에서는 resolve
시에는 .then()
으로, reject
시에는 .catch()
로 값을 처리한다.
destroy()
.destroy()
는 데이터 소스를 삭제하고 모든 데이터베이스 연결을 종료한다. 보통 애플리케이션을 종료시킬 때 이 메소드를 호출한다.
'IT > TIL' 카테고리의 다른 글
[TIL13_23.1.21.] [Node] Express - 'westagram' 게시글 등록, 전체 게시글 조회, 특정 게시글 조회 코드 작성 (0) | 2023.01.21 |
---|---|
[TIL12_23.1.20.] [Node] Express 유저회원가입 코드 작성 (0) | 2023.01.21 |
[TIL10_23.1.18.] [Node] Express 초기 환경세팅 중 Express 분석 (0) | 2023.01.18 |
[TIL9_23.1.17.] [Node] Express 초기 환경세팅 (0) | 2023.01.17 |
[TIL8_23.1.16.] SQL Advanced | Assignment 3 (0) | 2023.01.16 |