서버 - express를 사용한 node서버로 http메시지 전달하기

FGPRJS·2022년 1월 27일
0

express 사용하기

다음을 통하여 express를 사용할 수 있다.

const express = require('express');

let app = express();

express는 CJS로만 작동한다.
ESM를 일절 제공하지 않아서, package.json등에서 type을 module로 한 경우, .cjs확장자를 사용해서 CJS를 사용한다는 점을 인지시켜야 한다.

express 초기화하기

다음 항목을 사용하지 않으면, 서버로서 동작하지를 않는다.

app.use(express.static(path.join(__dirname, '../dist')));

app.listen(process.env.PORT || port, () => {
  console.log("Express server listening");
});

가이드 문서를 통하여 조금 더 자세히 알아본다.

간단하지만 기본적으로 여러 레벨에서 사용할 수 있는 강력한 기능을 제공하며 다음 레벨에서 동작시킬 수 있다.

  • 애플리케이션 레벨 미들웨어
  • 라우터 레벨 미들웨어
  • 오류 처리 미들웨어
  • 기본 제공 미들웨어
  • 써드파티 미들웨어

여기서는, 기본 제공 미들웨어만을 살펴본다.

use

Express의 유일한 기본 제공 미들웨어 함수는 express.static입니다. 이 함수는 serve-static을 기반으로 하며, Express 애플리케이션의 정적 자산을 제공하는 역할을 합니다.

기본 제공 미들웨어에서는 옵션을 포함한 정적 자원을 제공할 수 있다.

여기서는 ../dist폴더를 자원폴더로 하였다.
../dist폴더는 webpack이 front-end 쪽 코드를 Build 하였을 때, Build한 결과물이 출력되는 폴더이다.
즉, 이 서버는 front-end 웹 어플리케이션 빌드 결과물을 자원으로 제공하는 것이다.

app.use(express.static(path.join(__dirname, '../dist')));

listen

다음 예제에서 간단한 예제와 함께 이것이 무엇을 하는 함수인지 설명한다.

const port = 3000

app.listen(port, () => {
  console.log(`Example app listening on port ${port}`)
})

앱은 서버를 시작하며 3000번 포트에서 연결을 청취합니다.

단, Heroku에서 위 코드는 동작하지 않는다.(관련 링크) 다음과 같이 기재해야 한다.

const port = 3000

app.listen(process.env.PORT || port, () => {
  console.log(`Example app listening on port ${port}`)
});

express 사용하기

get

다음 링크를 참조하여, express에서 URL에 기재된 [?기호](질의 문자열)를 사용할 수 있다.

아래 코드는 /request 경로로 받아온 get요청의 질의문을 가져와, 똑같은 string을 만드는 코드이다.

const express = require('express');

let app = express();

let resultQuery = 
'?' + 
encodeURIComponent('serviceKey') + 
'='+
'나의 서비스 키'; /*Service Key*/

const url = "요청 url"; /*URL*/

//GET
app.get('/request', (req, res) => {

  //URL로부터 받은 질의문을 분석
  let pageNo = req.query.pageNo;
  let numOfRows = req.query.numOfRows;
  let type = req.query.type;
  let CTPRVN_NM = req.query.CTPRVN_NM;
  let SIGNGU_NM = req.query.SIGNGU_NM;

  //질의문 그대로 똑같이 만들기
  resultQuery += "&pageNo=" + pageNo
  + "&numOfRows=" + numOfRows
  + "&type=" + type
  + "&CTPRVN_NM=" + CTPRVN_NM
  + "&SIGNGU_NM=" + SIGNGU_NM

  const result = url + resultQuery;
  console.log(result);
})

req.query를 통해, 요청으로 온 URL의 질의문의 값을 가져올 수 있다.

send

express에서 http메시지를 보낼 수 있다.
get함수에서 제공하는 Request / Response 인자를 통해서 간편하게 보낼 수 있다.

app.get('/request', (req, res) => {

  //URL로부터 받은 질의문을 분석
  let pageNo = req.query.pageNo;
  let numOfRows = req.query.numOfRows;
  let type = req.query.type;
  let CTPRVN_NM = req.query.CTPRVN_NM;
  let SIGNGU_NM = req.query.SIGNGU_NM;

  //질의문 그대로 똑같이 만들기
  resultQuery += "&pageNo=" + pageNo
  + "&numOfRows=" + numOfRows
  + "&type=" + type
  + "&CTPRVN_NM=" + CTPRVN_NM
  + "&SIGNGU_NM=" + SIGNGU_NM

  const result = url + resultQuery;
  res.send(result);
})

위는 예시이며, 보통 get시에 데이터를 불러오려면 시간이 걸리는 관계로, promise등을 사용하여 비동기화하는 것이 낫다.

메시지 전달하기

(작성중)

profile
FGPRJS

0개의 댓글