lflov

Express와 TypeORM 본문

node.js

Express와 TypeORM

마젠토브힘내부왕 2022. 10. 5. 14:18

이야 드디어 왔어요 주니어 백엔드 개발자인 저에게 실무에서 가장많이 사용할만한 api 만들기를 express 와 typeorm으로 해볼게요~ 증말 기대된다!

 

나는 할수있따!

 

 

[req | res]의 정체

 

node.js로 crup api만들땐 http 모듈 불러와서 했었던거 기억나죠?? 전 이제 났습니다

 

그때도 httpRequestListener 에 (request , response) 매개 변수로 받았죠? 그거 라고 추측이 되는군요 내용을 한번 볼까요?

 

간단한 서버동작 확인 하는 예시 코드로 해볼게요~

 

const express = require('express')
const cors = require('cors')
const app = express()
 
app.use(cors())
 
app.get('/ping', function (req, res, next) {
  response.json({message : 'pong'})
})
 
app.listen(3000, function () {
  'listening on port 3000'
})

느낌 오시나요? 전 살짝 냄새가 났어요

 

req : HTTP 통신시 요청에 대한 정보를 담는 객체 

> 클라이언트에서 전달한 메타 정보를 확인해야 할때는 여기서!@

 

res : req에 상응하여 응답에 대한 정보를 담는 객체가 바로 res

> 백엔드에서 내보내야 하는 메타 정보를 확인할때는 여기서!@

 

느낌이 더 오시나요? 하하하하하 전 아니랍니다

 

좀더 자세한 내용이 보고싶어요 한번 볼까요

 

req - 요청 객체(request)에 존재하는 다양한 메소드들

 

  • req.params : 이름 요청시 넘겨져온 path 파라미터를 담습니다.
  • req.query : GET 방식으로 넘어오는 query string 파라미터를 담고 있습니다.
  • req.body : POST 방식으로 넘어오는 파라미터를 담고있다. HTTP의 BODY 부분에 담겨져있는데, 이 부분을 파싱하기 위해 body-parser와 같은 패키지가 필요하다. 과거에는 body-parser를 꼭 별도로 설정했어야 했으나 express에 그 기본 기능이 내장되어 이제는 불필요하다. app.use(express.json()) 코드가 실행되면 저절로 parsing 해주는 기능이 있습니다.
  • req.route : 현재 라우트에 관한 정보를 담고 있습니다.
  • req.headers : HTTP의 Header 정보를 가지고 있습니다.
  • req.ip : 클라이언트의 IP Address를 호출합니다.
  • req.path : 클라이언트가 요청한 경로. 프로토콜, 호스트, 포트, 쿼리스트링을 제외한 순수 요청 경로입니다.
  • req.host : 요청 호스트 이름을 반환하는 간단한 메서드. 조작될 수 있으므로 보안 목적으로는 사용되어서는 안됩니다.
  • req.protocol : 현재 요청의 프로토콜 (http / https 등)

 

res - 응답객체(response)에 존재하는 다양한 메소드들

 

  • es.status(code) : HTTP 응답 코드를 설정합니다.
  • res.set(name, value) : 응답 헤더를 설정합니다. 일반적으로 직접 사용자가 쓸 일은 드문 편입니다.
  • res.send(body), res.send(status, body) : 클라이언트에 응답을 보내며 상태 코드에 대한 추가 여부는 선택사항입니다. 기본 콘텐츠 타입은 text/html이므로 text/plain을 보내려면 res.set(‘Content-Type’, ‘text/plain’)을 먼저 호출 해야합니다. JSON 형태의 전송은 바로 다음 이어지는 res.json을 사용합니다.
  • res.json(json), res.json(status, json) : 클라이언트로 JSON 형태의 데이터를 보냅니다.
  • res.type(type) : Contents-Type 헤더를 설정할 수 있는 간단한 메서드입니다.
  • res.sendFile(path, [options], [callback]) : path의 파일을 읽고 해당 내용을 클라이언트로 전송한다.

 

app.xxx() 의 정체

 

위 예시코드에서 제일 많이 사용되는게 app.xxx() 이죠? 저는 이친구의 정체가 너무 궁금해졌어요? 여러분들도 그렇죠? 그친구의 정체는?

 

‘app’은 express가 프레임워크로서 기본으로 제공하는 다양한 내부 기능 (Application: 공식문서 내 영문명칭)을 담아내기 위해 사용하는 객체

 

라고 하네요~ 이친구는 언제 등장할까요? 바로바로~

 

소스코드 내에서 이 ‘app’이 가장 먼저 등장하는 시점은 바로 최상위단에서 함수 형태의 express를 불러오는 순간 에 등장해요

 

이때는 express가 직접 실행되는 시점을 의미해요~

 

코드에서 볼까요??

 

const express = require('express'); // --- (1)
const app = express();              // --- (2)

 

여기서 (1)은 require 메소드를 통해서 “express 모듈을 임포트하여 객체를 생성하고 express 변수가 참조하도록 하는 행위

 

(2)는 "express()" 함수를 호출하고, app 이라는 변수안에 담는 행위

 

이 둘을 퓨전 한다면~~~

 

 ‘express()’ 라는 일종의 클래스 기능을 ‘app’이라는 새로운 변수안에 담아 객체 형태로 선언하는 것

 

이야 그렇군요 위 객체는 빈번하게 쓰일거같아요

 

> 왜냐하면 내부에 존재하는 다양한 메소드를 활용하기 위해서에요~

> 왜냐하면 express()라는 함수를 통해서 생성된 app이라는 객체는, 전체 API 서버의 기능을 정의하고 서버를 실행시키는 주 객체로 활용되기 때문입니다

 

>즉, app 객체와 상호작용 하는 과정에서 우리가 의도하는 API 기능이 실행/구현되는 것이라고 정의할 수 있습니다.

 

express의 대표적인 application 기능으로는

 

  • HTTP 요청 라우팅 기능
  • 미들웨어 상세설정
  • HTML 렌더링 기능
  • 템플릿 엔진 렌더링 기능

이 있네요 

 

여기서 네트워크 통신을 위해 필수로 활용하는 app.use() 와 app.HTTPmethod() 이 두가지 메소드 살펴볼게용~~

 

app.use()

 

Express는 미들웨어 함수의 호출/실행으로 이루어지는 프레임워크라고 표현할 수 있습니다. 여기서 미들웨어 함수란, ‘req’ 객체, ‘res’ 객체, 그리고 미들웨어 함수를 호출시키는 ’next’를 매개변수로 받는 함수를 의미합니다.

 

미들웨어 함수 > “함수와 함수 사이에 존재하여 이 둘을 연결 짓는 또 다른 함수”

 

app.use()는 일종의 미들웨어 함수를 추가하는 함수입니다~

 

매개변수 형태로 들어오는 다양한 함수들을 받아 app에 middleware로 추가해줍니다!

 

app.use()에 매개변수는 처음에는 외부 요청시 경로로 활용되는 path가 1번 ( path에 명시되어 있는 경로 내용중 / 이후의 경로를 일부분이라도 공유하고 있는 메소드는 무조건 호출!)

> 만약 app.use('/drink',...) 이렇게 있다면

 

‘/drinks’, ‘/drinks/coffee’, ‘/drinks/wine’’, ‘/drinks/coffee/coldbrew’ 등의 경로들과 매칭되어서 해당 경로를 품고 있는 메소드들을 활성화 시키는 효과를 줍니다.

 

app.use()의 default path는 / 입니다! 내부 path부분에 아무것도 적혀 있지 않다면 클라이언트가 어떠한 요청을 보내더라도 app.use는 매번 호출되게 됩니다.

 

app.use(cors());

app.use(morgan('combined'));

app.use(express.json());

 

우리가 초기세팅에 사용한 해당 부분들은 path가 생략된것이라고 볼수 있겠죠? 이러면 default path 가 / 이므로 런서버 환경에서 모든 요청에 필히 동작할 수 있게 설정하는 목적이 있던것입니다!

 

이후에는 기타 callback 함수들이 매개변수로 놓입니다.

 

 

app.httpMethod()

 

app.httpMethod()는 외부에서 들어오는 HTTP 네트워크 요청을 라우팅합니다

 

http요청이란? 뭘까요? 삐삐 삐카츄우

 

CRUD기능에 상응하는 세부 HTTP메소드(GET,POST,PUT,DELETE)들을 의미합니다! 이것들을 express에서 사용하려면 어떻게 해야 할까요?

 

바로 app.get() app.post() app.put() app.delete()등의 형태로 진행하면 되겠죠?

 

왜냐 app’은 express가 프레임워크로서 기본으로 제공하는 다양한 내부 기능 (Application: 공식문서 내 영문명칭)을 담아내기 위해 사용하는 객체이기 때문이에요~

 

app.use()로 수렴되는 모든 http 메소드를, 각각의 요청에 맞게 의도한 별도의 callback 함수만이 동작하도록 아래와 같이 분기 처리하는 방법을 사용합니다. 예를들어, 클라이언트가 GET에 해당하는 데이터 조회 요청을 ' / ' path로 보낸다면 app.get(' / ' , functionForGet) 요청만을 처리하게 되는 것 입니다.

 

app.post('/', functionForPost);               // 클라이언트의 post요청
app.get('/', functionForGet);                 // 클라이언트의 get요청
app.put('/', functionForPut;                  // 클라이언트의 put요청
app.delete('/', functionForDelete);           // 클라이언트의 delete요청

 

app.xxx 공식문서

http://expressjs.com/en/4x/api.html#app

 

Express 4.x - API Reference

Express 4.x API express() Creates an Express application. The express() function is a top-level function exported by the express module. var express = require('express') var app = express() Methods express.json([options]) This middleware is available in Ex

expressjs.com

 

'node.js' 카테고리의 다른 글

2차 프로젝트 회고록  (2) 2022.11.13
Express 초기설정들  (0) 2022.10.06
TypeORM & DB connection  (1) 2022.10.05
Express 초기설정?  (1) 2022.10.05
데이터베이스  (0) 2022.09.26