티스토리 뷰
안녕하십니까
저번에 node js express + typescript + webpack 세팅을 해봤습니다. 그리고 그 이어서 mysql에 연결까지 해보려고 합니다.
아직 많이 미숙하니 이상하더라고 봐주세요!
기본 세팅에 대해서는 저번에 작성글을 한번 봐주세요.
2019/05/12 - [nodeJS] - nodeJS Express + Typescript + webpack 적용하기
일단 express에 mysql 자체를 붙이는거는 Spring boot에 mysql 붙이는 것보다 진짜 간단합니다.
npm install --save mysql
npm install --save-D @types/mysql
커넥션과 사용법은 다음과 같습니다.
// Connection
export const connection = mysql.createConnection({
host: config.db_server.host,
user: config.db_server.user,
password: config.db_server.password,
database: config.db_server.database
});
// Use
public getBoard(req: express.Request, res: express.Response): any {
connection.query("select * from c_notice", (err, rows, fields) => {
let notice: Array<noticeVO> = new Array<noticeVO>();
Object.assign(notice, rows);
res.status(200).json(notice);
});
}
참고로 Object.assign을 사용한 이유는 Rest Api 형태로 해서 response를 단순히 보낼 수도 있었지만 VO 형태로 해서 response를 보내고 싶었습니다. 나중에 swagger를 이용해서 문서를 만들려구요.
하지만 이렇게 단순히 만든다면 얼마나 간편하겠습니까.
저는 이러한 로직들을 분리하고 비동기 형식으로 처리해 보고 싶어 다음과 같이 수정했습니다.
일단 파일 구조는 다음과 같습니다.
Spring boot를 이용하다 보니 파일 구조도 비슷하게 짜려고 하는 모습입니다...
Service 단은 다음과 같이 사용했습니다.
async/await를 이용해 보고 싶었지만 잘 안되서 Promise를 이용했습니다.
java만 사용하다보니 promise에 대한 이해도가 부족해서 많이 애먹었습니다...
import { BoardVO } from "../vo/BoardVO";
import { connection } from "../configure/connection";
import l from "../configure/logger";
import { RowDataPacket, OkPacket } from "mysql";
export class BoardService {
getBoard(): Promise<Array<BoardVO>> {
let notice: Array<BoardVO> = new Array<BoardVO>();
return new Promise((resolve, reject) => {
connection.query("select * from c_notice", (err, rows, fields) => {
if (err) {
l.error(err);
}
Object.assign(notice, rows);
resolve(notice);
});
});
}
}
export default new BoardService();
그리고 controller를 다음과 같이 수정했습니다.
import express from "express";
import { connection } from "../../configure/connection";
import { BoardVO } from "../../vo/BoardVO";
import BoardService from "../../services/board.service";
export class boardController {
router: any;
constructor() {
this.router = express.Router;
}
public getBoard(req: express.Request, res: express.Response): any {
BoardService.getBoard().then(r => {
if (r) {
res.status(200).json(r);
} else {
res.status(400).end();
}
});
}
}
export default new boardController();
다른 예제들에서는 db connection과 release 및 pool size를 세팅해주던데 저는 connection과 release를 하면 api를 호출할 때마다 오류가 생기더라고요.
이 부분에 대해서는 좀 더 연구를 해야할 거 같습니다.
좀 더 공부한다음 빨리 익숙하게 node js를 사용할 수 있으면 좋겠습니다.
이만!
참고
mysql connection
https://www.npmjs.com/package/mysql
https://poiemaweb.com/nodejs-mysql
mysql 비동기/동기 처리
https://holywater-jeong.github.io/blog/node-mysql-async-await/
https://mayajuni.github.io/2016/07/12/typescript-nodejs-mysql/
'BackEnd > Node.js' 카테고리의 다른 글
node.js express + typescript + sequelize (ORM) 다양한 기능 (0) | 2019.05.25 |
---|---|
node.js express + typescript + sequelize (ORM) (0) | 2019.05.24 |
node.js Express + Typescript + webpack 적용하기 (0) | 2019.05.12 |
해시뱅 # (0) | 2018.09.04 |
검색시 하이라이트 (0) | 2018.07.26 |
- Total
- Today
- Yesterday
- angular router
- data table component
- Spring Boot
- data gird component
- jQuery
- data component module
- python3
- Spring
- react
- 파이썬
- mobx
- Redux
- JPA
- React-router
- 페이스북 로그인
- data grid component
- Router
- Angular
- MySQL
- JavaScript
- Java
- localStorage
- data component
- JSON
- facebook login
- 파이썬3
- Python
- CSS
- https://www.tistory.com/auth/logout/
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |