How We Coding

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 을 막을 수 있음..!!





-


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


- '가 아닌 ` 

- 아직 잘 모르겠음. 추후 포스팅 하기..


< 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