[Node.js] Express

Zero·2023년 3월 12일

Node

목록 보기
5/11

Express ? 🔍

익스프레스(Express.js)는 노드(NodeJS)상에서 동작하는 웹 개발 프레임워크이다. 쉽게 말하자면 NodeJS를 사용하여 쉽게 서버를 구성할 수 있게 만든 라이브러리라고 생각하면 된다.

  • 가볍고 유연하게 웹 프레임워크를 구성할 수 있는 장점이 있다.
  • 미들웨어(Middleware) 구조 때문에 가능하다.
  • Js코드로 작성된 다양한 기능의 미들웨어는 개발자가 필요한 것만 선택하여 익스프레스와 결합해 사용할 수 있다.


Express 설치하기 🔍

npm i express

해당 명령어를 통해 Express를 설치할 수 있다.



Express 사용하기 🔍

const express = require("express");
const app = express();

app.listen(3000, () => {
	console.log("Listening on Port 3000 !!!");  
}

app.get('/', function(req,res) => {
	res.send("Hello world");  
}

위의 코드로 구현된 서버에서 기본 url로 get 요청을 받으면 4번째 줄의 get으로 들어와 클라이언트에 응답으로 Hello world를 반환한다.

이렇듯 get메소드는 GET 요청이면서 요청 url이 첫 번째 인자에 해당할 경우 두 번째 인자의 함수를 실행하고 res.send와 같은 응답 메소드로 사이클을 마친다. 다만 응답으로 마치지 않고 next('route)를 써서 다음 get메소드로 진행할 수는 있다.


use 메소드 🔍

만약 get메소드 앞에 use 메소드가 나온다면 코드를 위에서부터 진행하면서 use 메소드를 하나하나 거치게 된다. get으로 응답을 마치기 전에 무엇인가를 계속 중간에 끼워준다고 생각하면 쉽다.

메소드의 형태는 get과 동일하며 첫 번째 인자에 url이 오고 두 번째 인자에 함수가 온다 url이 일치할 때만 use 메소드에 들어가고 첫 번째 인자를 생략할 경우에 모두 들어간다.

하지만 주의할 점은 next 메소드를 써야지만 다음으로 진행할 수 있다.

app.use(function (req, res, next) {
    console.log('use 메소드에 진입');
    next();
});


라우팅 (Routing)

클라이언트의 특정 요청 method와 엔드포인트에 따라 다른 응답을 처리하는 것을 의미한다.

express 라우팅 예시

const express = require('express');

const app = express()

app.use('/', (req,res) => {
  console.log("WE GOT A NEW REQUEST")
  res.end()
})

app.listen(3000, () => {
  console.log("LISTENING ON PORT 3000!!!")
})

app.get('/', (req,res) => {
  res.send('hello world');
})

app.get('/r/:subreddit/:postId' , (req,res) => {
  const {subreddit , postId} = req.params;
  res.send(`<h1>This postId : ${postId} and subreddit : ${subreddit} !! sended</h1>`)
})

app.get('*', (req,res)=> {
  res.send("Sorry Can't Find Page , Again Insert PageName Please!!");
})

1) 루트 라우트(/)에서 모든 http 요청에 대한 응답
2) 루트 라우트(/)에서 get 요청에 대한 응답
3) /r/:subreddit/:postId 에서 post 요청에 대한 응답
4) 설정해둔 경로 제외 모든 경로(*)에서 get 요청에 대한 응답



Express 경로 매개 변수

path의 매개변수란 ?

라우트를 생성해서 그 안에 경로 문자열에 콜론을 이용해서 변수나 경로 변수로 지정하게끔 하는 것이다.

// 경로에 콜론(:)을 사용해서 사용할 수 있다.
app.get('/r/:subreddit/:postId' , (req,res) => {
  const {subreddit , postId} = req.params;
  res.send(`<h1>This postId : ${postId} and subreddit : ${subreddit} !! sended</h1>`)
})

Path의 매개변수를 설정해서 경로에 맞춰 입력을 해보면 다음과 같은 결과가 나온다.

이 때, :params는 무엇이어야 하는지 정한 것이 아닌 말 그대로 일치시키는 패턴이다.
우리가 설정한 /r/<params>의 패턴만 맞춰주게 되면 모두 우리가 설정한 텍스트를 볼 수 있다.

매개변수로 입력한 값은 req 객체의 메서드인 params 프로퍼티로 값을 사용할 수 있다.



express 쿼리 문자열 작업하기

app.get('/search' , (req,res) => {
	const { q } = req.query;
  	res.send(`<h3>Search result for: ${q} </h3>`);
})

-> 다음과 같이 req 객체의 메서드인 query 프로퍼티 값을 통해 쿼리 문자열을 작업할 수 있다.

0개의 댓글