Dandy Now!
  • [개발자의품격][부트캠프][1기][30차시] Node.js #2 | Express 설치 | 라우팅(GET, POST) | MySQL 연동
    2022년 04월 07일 12시 03분 50초에 업로드 된 글입니다.
    작성자: DandyNow
    728x90
    반응형

    | Express

    Express 설치

    터미널 창에서 아래 명령어를 실행하여 "package.json" 파일을 생성한다.

    npm init

     

    Express를 설치한다.

    npm i express

     

    생성된 "package.json"은 다음과 같다.

    // package.json
    {
      "name": "node",
      "version": "1.0.0",
      "description": "",
      "main": "10_app.js",
      "scripts": {
        "test": "node 10_app.js"
      },
      "author": "Sewol",
      "license": "ISC",
      "dependencies": {
        "express": "^4.17.3",
      }
    }

     

    express로 웹 서버 구동

    // express
    const express = require("express");
    const app = express();
    
    app.listen(3000, () => {
      console.log("서버가 포트 3000번으로 시작되었습니다.");
    });

     

    [그림 1] express로 웹 서버 구동

     


     

    | 라우팅

    ...
    // http://localhost:3000
    app.get("/", (req, res) => { // req는 클라이언트의 request 객체,  res는 서버의 response 객체
      res.send("Hello World");
    });

     

    [그림 2] 라우팅 처리 결과

     

    GET

    ...
    app.get("/customers", (req, res) => {
      const customers = [
        { name: "Sewol", email: "sewol@gmail.com" },
        { name: "ilnam", email: "ilnam@gmail.com" },
      ];
      res.send(customers);
    });

     

    ※ Postman에서 get, post 실습 진행

    [그림 3] GET

     

    POST

    // express
    const express = require("express");
    const app = express();
    
    app.use(
      express.json({
        limit: "50mb",
      })
    );
    
    ...
    
    app.post("/customers", (req, res) => {
      console.log(req.body.param);
      res.send("Ok");
    });

     

    [그림 4-1] POST할 JSON 작성 및 전송

     

    [그림 4-2] POST 처리 결과

     


     

    | MySQL 연동

    MySQL Workbench 권한 설정

    [그림 5-1] Login 설정

     

    [그림 5-2] Schema Privilege 설정

     

    [그림 5-3] Schema Privilege 설정 마무리

     

    MySQL 설치

    npm i mysql

     

    관련 코드 작성

    pool과 쿼리문을 실행하고 결과를 반환하는 함수를 mysql/index.js에 작성한다.

    // mysql/index.js
    const mysql = require("mysql");
    const sql = require("./sql"); // 쿼리문 sql.js를 가져온다.
    
    const pool = mysql.createPool({
      host: "localhost",
      port: 3306,
      user: "dev",
      password: "1234",
      database: "dev",
      connectionLimit: 10,
    });
    
    /* 쿼리문을 실행하고 결과를 반환하는 함수 */
    const query = async (alias, values) => {
      return new Promise((resolve, reject) =>
        pool.query(sql[alias], values, (error, results) => {
          if (error) {
            // 에러가 발생
            console.log(error);
            reject({
              error,
            });
          } else resolve(results); // 쿼리 결과를 전달
        })
      );
    };
    
    module.exports = {
      query,
    };

     

    사용할 쿼리문을 담은 mysql/sql.js를 작성한다. 앞에서 작성한 index.js에서 이용된다.

    // mysql/sql.js
    module.exports = {
      categoryList: `select * from product_category`,
      categoryInsert: `insert into product_category set ?`,
    };

     

     

    웹 서버 구동을 위한 코드를 작성한다. 앞에서 작성한 index.js를 이용한다.

    // 11_app_mysql.js
    const express = require("express");
    const app = express();
    const mysql = require("./mysql");
    
    app.use(
      express.json({
        limit: "50mb", // 최대 50메가
      })
    ); // 클라이언트 요청 body를 json으로 파싱 처리
    
    app.listen(3000, () => {
      console.log("서버가 포트 3000번으로 시작되었습니다.");
    });
    
    app.get("/api/product/category", async (req, res) => {
      const categoryList = await mysql.query("categoryList");
      res.send(categoryList);
    });
    
    app.post("/api/product/category", async (req, res) => {
      const result = await mysql.query("categoryInsert", req.body.param);
      res.send(result);
    });

     

    [그림 6-1] 웹 서버 실행

     

    GET 테스트를 통해 MySQL로부터 데이터를 가져온 것을 [그림 6-2]와 같이 확인할 수 있다.

    [그림 6-2] Postman에서 GET 테스트

     

    [6-3] Postman에서 POST 테스트

     

    [6-4] MySQL Workbench에서 POST 결과 확인

     

    728x90
    반응형
    댓글