구매 관리 Rest API

2020. 7. 21. 10:22Java script/수업내용

게임네트워크프로그래밍_최진혁_20200902_Protocol.xlsx
0.01MB

필요 프로그램 & 문서

 1. Visual Studio Code : 코드 편집 프로그램

 2. Postman : Post, Delete 등 서버와의 Request, Respone 등을 송수신을 확인하기 위한 프로그램

 3. Node JS

 4. npm express

 5. 프로토콜 문서 (포스팅 상단에 위치해있음)

개발 환경 세팅

 1. Visual Studio Code 설치

 2. Node JS 설치

 3. Beautify Extention 설치

  - 설정 (File > Preference > Settings 에서 Save 검색 Format on save 체크)

  - 적용이 안된다면 Visual Studio Code를 재 실행

 4. Postman 설치

 

디렉터리 구조 구성

 1. 터미널 켜기

 2. 프로젝트 폴더로 터미널 현재 위치로 이동

 3. npm init : npm Initialize

 4. npm i express : express 설치

 5. npm i --save-dev nodemon : devDependencies 속성 추가. 개발용 패키지만 따로 관리

 6. npm i -g express-generator : pakage.json 및 디렉터리 구조 구성 (전역 설치)

 7. express "폴더명" --view=pug : express 프로젝트 생성. 폴더명으로 프로젝트가 생성됨

 8. 7에서 설정한 폴더명으로 터미널 현재 위치 이동

 9. npm i : npm 모듈 설치

10. npm i --save moment : 날짜 관련 모듈 설치

 

app 런타임 명령어 : npm start

 

구매 관리 Rest API : <purchases.js>

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
50
51
52
53
54
55
56
57
58
59
60
const moment = require('moment'); // 날짜 모듈
const express = require('express');
const router = express.Router();
const purchasesList = {};
 
router.post('/'function (req, res, next) {
    const serialNo = Date.now(); // 1970-01-01 부터 지금까지 지난 시간(ms). 여기서는 고유 시리얼 번호로 사용
    const userId = req.body.userId;
    const goodsId = req.body.goodsId;
    const purchasesDate = moment().format('LLLL'); // 현재 날짜 가져옴
 
 
    if (userId && goodsId) { // 만약 유저번호와 상품번호 둘 다 빠짐없이 있다면
        purchasesList[serialNo] = { // purchasesList 객체에 각 세가지 요소 넣음
            userId, // 자바스크립트의 객체는 컨테이너 요소이기 때문에
            goodsId, // 클래스처럼 객체 내부에 변수를 지정하고 거기에 값을 할당하는 형식이 아닌
            purchasesDate // 객체 내부에 값이 할당된 변수채로 집어넣어서 Key : Value 식으로 저장 가능
        };
        res.status = 200// 저장 완료 응답
    } else {
        res.status = 501// 저장 실패 응답
    }
    res.send(makeResult(serialNo, res.status)); // 응답 결과를 리턴하는 메소드를 send로 송출
});
 
router.get('/'function (req, res, next) {
    const userId = req.body.userId;
   res.send(makeHistory(userId));
});
 
module.exports = router;
 
function makeResult(serialNo, status) {
    let resultStr = `구매 결과 ${status}<br>구매`;
    console.dir(purchasesList);
    if (status === 200) { // 만약 저장 성공 응답이라면
        resultStr += `성공<br>`; // <br> : CRLP와 같은 개념
        resultStr += `사용자 고유 번호 : ${purchasesList[serialNo].userId}, `;
        resultStr += `상품 고유 번호 : ${purchasesList[serialNo].goodsId}, `;
        resultStr += `구매 날짜 : ${purchasesList[serialNo].purchasesDate}`;
        resultStr += `<br>`;
    } else { // 저장 실패 응답이라면
        resultStr += `실패`;
    }
    return resultStr;
}
 
function makeHistory(userId) {
    let resultStr = `구매 내역 조회<br>`;
    for (const serialNo in purchasesList) {
        if (purchasesList[serialNo].userId !== userId)
            continue;
        resultStr += '&nbsp&nbsp&nbsp&nbsp'// &nbsp : \t과 같은 개념. </br>로 닫아도 되고 닫지 않아도 됨
        resultStr += `구매 고유번호 : ${serialNo}, `;
        resultStr += `상품 고유번호 : ${purchasesList[serialNo].goodsId}, `;
        resultStr += `구매 날짜 : ${purchasesList[serialNo].purchasesDate}`;
        resultStr += '<br>';
    }
    return resultStr;
}
 

- app.js에서 라우터 설정 : var purchasesRouter require('./routes/purchases');

- app.js에서 라우터 사용 : app.use('/purchases'purchasesRouter);

- 상세 내용은 주석 참고

 

개념 정리

 1. JavaScript 에서의 객체는 컨테이너 형태인 것을 기억하자. 특징은 다음과 같다.

  - Key : Value의 쌍으로 이루어짐

  - JavaScipt의 객체는 C#과는 다르게 클래스 내부에 변수를 만든 후 객체를 생성해서 값을 할당하는 형태가 아니다. 일단 객체를 생성하고 나면, 그 내부에 무슨 객체든 사전에 정의할 필요 없이 그때그때 바로 때려박을 수 있다.

  - 이 때, Key : Value 형태로 다른 객체에 넣을 수 있기 때문에 변수와 값이 동시에 저장된다. 이런식으로 이것 저것 넣다보면 그 형태가 아마 Json하고 유사한 형식이 되지 않을까 싶음

 

 2. 동적 언어에서 오는 특성을 잘 생각해야 한다. 알아둬야 할 키워드는 대충 다음과 같다.

 - hoisting, function-scope, block-scope

 - var, let, const의 차이 

 

 

'Java script > 수업내용' 카테고리의 다른 글

비동기 / 콜백 / Promise / async / await  (0) 2020.07.23
HTML TAG 정리  (0) 2020.07.23