<4> MySQL & node-mysql
https://www.opentutorials.org/course/2136/12020 참고
< 설치 >
- 비트나미를 이용한 설치 (https://bitnami.com/stack/mamp)
- 설치중 맨 아래를 제외하고 체크 해제.
- pw 설정
$ cd /App(tab)/mamp(tab)/mysql/bin
$ ./mysql -uroot -p
>> 설정한 pw 입력
mysql>
정상설치..!!
< 구조 >
테이블
레코드(행)
필드(열)
데이터베이스 (연관된 테이블들의 묶음)
하나의 애플리케이션이 하나의 데이터베이스에 대응.
하나의 PC에는 여러 개의 애플리케이션이 설치.
이것들을 그룹핑하는 것이 데이터베이스 서버 라는 것..!! (opentutorials.ort:3306)
...
< MySQL 사용하기 >
$ ./mysql (-hlocalhost) -uroot -p
$ ./mysql -hopentutorial.org -P3306 -uroot -p // 이런식으로도 접속 가능
즉 데이터베이스 서버에 접속을 하고 인증 과정을 거친 상태..!!
다음으로는 데이터베이스의 테이블을 만들기 위해 데이터베이스를 만들어야 함.
( 데이터베이스 서버 != 데이터베이스 )
mysql>
데이터베이스 보기
1 | show databases; |
데이터베이스 생성
1 | CREATE DATABASE o2 CHARACTER SET utf8 COLLATE utf8_general_ci; |
데이터베이스 선택
1 | use o2; |
테이블 생성
1 2 3 4 5 6 7 | CREATE TABLE `topic` ( `id` int (11) NOT NULL AUTO_INCREMENT, `title` varchar (100) NOT NULL , `description` text NOT NULL , `author` varchar (30) NOT NULL , PRIMARY KEY (id) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; |
생성된 테이블 확인
1 | show tables; |
데이터 삽입
1 2 | INSERT INTO topic (title, description, author) VALUES ( 'JavaScript' , 'Computer language for web.' , 'egoing' ); INSERT INTO topic (title, description, author) VALUES ( 'NPM' , 'Package manager' , 'leezche' ); |
테이블 내용 확인
mysql> select * from topic; // topic 테이블에 있는 모든 행을 가져온다.
< MySQL UPDATE & DELETE >
mysql> update topic set TITLE='npm' where id='2'; // topic 테이블에서 id가 2인 TITLE 을 npm 으로 변경
mysql> delete from topic where id='2';
< node-mysql : 접속 & SELECT & INSERT & UPDATE & DELETE >
- js로 어떻게 mysql 을 제어하는가
- node-mysql 설치
$ npm install --save node-mysql
https://github.com/mysqljs/mysql 참고
코드 예시
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 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 | var mysql = require('mysql'); var conn = mysql.createConnection({ host : 'localhost', user : 'root', password : '111111', database : 'o2' }); conn.connect(); var sql = 'SELECT * FROM topic'; conn.query(sql, function(err, rows, fields){ if(err){ console.log(err); } else { for(var i=0; i<rows.length; i++){ console.log(rows[i].title); } } }); var sql = 'INSERT INTO topic (title, description, author) VALUES(?, ?, ?)'; var params = ['Supervisor', 'Watcher', 'graphittie']; conn.query(sql, params, function(err, rows, fields){ if(err){ console.log(err); } else { console.log(rows.insertId); } }); var sql = 'UPDATE topic SET title=?, author=? WHERE id=?'; var params = ['NPM', 'leezche', 1]; conn.query(sql, params, function(err, rows, fields){ if(err){ console.log(err); } else { console.log(rows); } }); var sql = 'DELETE FROM topic WHERE id=?'; var params = [1]; conn.query(sql, params, function(err, rows, fields){ if(err){ console.log(err); } else { console.log(rows); } }); conn.end(); | cs |
- 21, 30 행 확인해보기..!!
- ? 는 치환자를 두고 치환자의 순서에 따라 파라미터를 실제 값을 배열로 생성한 다음 쿼리문의 두번째 인재 값으로 전달 가능 // 보안 관련 sql injection attack 을 막을 수 있음..!!
'H6 > backend (Node.js, tsc)' 카테고리의 다른 글
<6> tsconfig.json 을 통한 컴파일 옵션 설정 (0) | 2018.01.31 |
---|---|
<5> node-mysql (Typescript) (0) | 2018.01.22 |
<3> 에러처리.. (0) | 2018.01.22 |
<2> app.ts 및 server.ts 만들기 (0) | 2018.01.22 |
<1> Node.js, Express, Typescript 환경설정 (0) | 2018.01.21 |
<3> 에러처리..
-
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 31 32 33 34 35 36 | import * as express from 'express'; import * as bodyParser from 'body-parser'; //import { testRoutes } from './apis/test/route/test.route'; export class Server { /** app 에 대한 타입 설정 */ public app: express.Application; constructor() { /** express 설정을 위한 express 선언 */ this.app = express(); /** bodyParser 선언 */ this.app.use(bodyParser.urlencoded({extended: false})); /** 라우터 */ //this.app.user(testRoutes.testRouter); /** Not Found */ this.app.use( (req: express.Request, res: express.Response, next: Function) => { /** * Error 라는 정의가 있지만 Error 에는 status 라는 정의가 없어서 any 설정 */ const err: any = new Error('not_found'); err.status = 404; next(err); }); /** 에러 처리 */ this.app.use((err: any, req: express.Request, res: express.Response) => { err.status = err.status || 500; console.error(`error on request ${req.method} | ${req.url} | $err.status}`); console.error(err.stack || `${err.message}`); err.message = err.status == 500 ? 'Somthing bad happened.' : err.message; res.status(err.status).send(err.message); }); } } | cs |
- '가 아닌 `
- 아직 잘 모르겠음. 추후 포스팅 하기..
'H6 > backend (Node.js, tsc)' 카테고리의 다른 글
<6> tsconfig.json 을 통한 컴파일 옵션 설정 (0) | 2018.01.31 |
---|---|
<5> node-mysql (Typescript) (0) | 2018.01.22 |
<4> MySQL & node-mysql (0) | 2018.01.22 |
<2> app.ts 및 server.ts 만들기 (0) | 2018.01.22 |
<1> Node.js, Express, Typescript 환경설정 (0) | 2018.01.21 |
<2> app.ts 및 server.ts 만들기
< app.ts >
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | import * as express from 'express'; import * as bodyParser from 'body-parser'; import { testRoutes } from './apis/test/route/test.route'; export class Server { /** app 에 대한 타입 설정 */ public app: express.Application; constructor() { /** express 설정을 위한 express 선언 */ this.app = express(); /** bodyParser 선언 */ this.app.use(bodyParser.urlencoded({extended: false})); /** 라우터 */ this.app.user(testRoutes.testRouter); } } | cs |
$ npm install body-parser --save
- 모듈 가져오기
>> import * as express from 'express'; 를 통해 모듈을 불러올 수 있다
< body-parser >
- npm 모듈 중 request body 를 json 형식으로 변환해 주는 모듈
- express 를 통해 만든 app 객체의 .use() 를 활용하여 bodyParser.urlencoded() 를 해준다.
- extended 는 아래 설명대로... (https://stackoverflow.com/questions/29960764/what-does-extended-mean-in-express-4-0)
If extended is false, you can not post "nested object" person[name] = 'caw' // Nested Object = { person: { name: cw } } If extended is true, you can do whatever way that you like. |
참고 2 : http://sjh836.tistory.com/154
< server.ts >
1 2 3 4 5 6 7 8 9 10 11 | import { Server } from './app'; import * as express from 'express'; const port: number = 80; const app: express.Application = new Server().app; app.set('port', port); app.listen(app.get('port'), () => { console.log('server listening on port ' + port); }).on('error', err => { console.error(err); }); | cs |
컴파일 후
$ sudo node server 를 통해 서버를 실행시킬 수 있다.
'H6 > backend (Node.js, tsc)' 카테고리의 다른 글
<6> tsconfig.json 을 통한 컴파일 옵션 설정 (0) | 2018.01.31 |
---|---|
<5> node-mysql (Typescript) (0) | 2018.01.22 |
<4> MySQL & node-mysql (0) | 2018.01.22 |
<3> 에러처리.. (0) | 2018.01.22 |
<1> Node.js, Express, Typescript 환경설정 (0) | 2018.01.21 |