express 매소드

boyeonJ·2023년 10월 22일
0

FRONT

목록 보기
11/14

아래는 toss-payment 연동을 하는 전체 코드 입니다. 아래 코드를 통해 express 매소드에 대해 알아보려고 합니다.

express 매소드

1. express.use

express.use는 Express.js 애플리케이션에 미들웨어를 추가할 때 사용하는 메서드입니다. 미들웨어는 요청과 응답 사이에서 동작하는 중간 소프트웨어로, 다양한 기능을 추가하거나 요청 및 응답을 수정하는 데 사용됩니다.

2. express.static

express.static미들웨어 함수입니다. 이 함수를 사용하여 정적 파일을 제공할 디렉토리를 설정하는 부분입니다. ./client는 클라이언트 측 정적 파일이 위치한 디렉토리 경로를 나타냅니다. 즉, 클라이언트 측 웹 페이지에 필요한 HTML, CSS, JavaScript 파일 등이 이 디렉토리에 저장되어 있어야 합니다.

이렇게 설정된 express.static 미들웨어는 Express 애플리케이션이 요청 경로에 따라 ./client 디렉토리 내의 정적 파일을 찾아서 클라이언트에게 제공합니다. 예를 들어, 클라이언트가 /styles.css 경로로 요청하면, 이 미들웨어는 ./client/styles.css 파일을 찾아 응답으로 반환하게 됩니다. 이를 통해 정적 파일을 쉽게 제공하고 웹 페이지를 구성할 수 있습니다.

3. res.sendFile

app.get("/", (req, res) => {
  const path = resolve("./client/index.html");
  res.sendFile(path);
});

설정된 파일 경로에서 파일을 읽어와 클라이언트에게 전송합니다. 클라이언트의 웹 브라우저는 해당 파일을 받고 렌더링하여 화면에 표시할 것입니다.

4. Buffer.from

const encryptedSecretKey = "Basic " + Buffer.from(secretKey + ":").toString("base64");

이 문자열을 바이너리 데이터로 변환하는 부분입니다. Buffer는 Node.js에서 제공되는 데이터 버퍼 클래스로, 이진 데이터를 다루는 데 사용됩니다.

다른 유용한 모듈들

resolve

https://webpack.kr/configuration/resolve/

got

https://www.npmjs.com/package/got

const express = require("express");
const app = express();
const { resolve } = require("path");
const got = require("got");


app.use(express.static("./client"));

app.get("/", (req, res) => {
  const path = resolve("./client/index.html");
  res.sendFile(path);
});

app.get("/success", async (req, res) => {
  const { paymentKey, orderId, amount } = req.query;

  /**
   * 토스페이먼츠 API는 시크릿 키를 사용자 ID로 사용하고, 비밀번호는 사용하지 않습니다.
   * 비밀번호가 없다는 것을 알리기 위해 시크릿 키 뒤에 콜론을 추가합니다.
   * @see https://docs.tosspayments.com/reference/using-api/authorization#%EC%9D%B8%EC%A6%9D
   */
  const encryptedSecretKey =
    "Basic " + Buffer.from(secretKey + ":").toString("base64");

  try {
    const response = await got.post(
      "https://api.tosspayments.com/v1/payments/" + paymentKey,
      {
        headers: {
          Authorization: encryptedSecretKey,
          "Content-Type": "application/json",
        },
        json: {
          orderId: orderId,
          amount: amount,
        },
        responseType: "json",
      }
    );

    console.log(response.body);
    // TODO: 구매 완료 비즈니스 로직 구현
    
    const path = resolve("./client/success.html");
    res.sendFile(path);
  } catch (error) {
    res.redirect(
      `/fail?code=${error.response?.body?.code}&message=${error.response?.body?.message}`
    );
  }
});

app.get("/fail",  (req, res) => {
  var path = resolve("./client/fail.html");
  res.sendFile(path);
});

app.listen(8080, () => console.log(`Node server listening on port ${8080}!`));

0개의 댓글