
익스프레스(Express.js)는 노드(NodeJS)상에서 동작하는 웹 개발 프레임워크이다. 쉽게 말하자면 NodeJS를 사용하여 쉽게 서버를 구성할 수 있게 만든 라이브러리라고 생각하면 된다.
npm i 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메소드로 진행할 수는 있다.
만약 get메소드 앞에 use 메소드가 나온다면 코드를 위에서부터 진행하면서 use 메소드를 하나하나 거치게 된다. get으로 응답을 마치기 전에 무엇인가를 계속 중간에 끼워준다고 생각하면 쉽다.

메소드의 형태는 get과 동일하며 첫 번째 인자에 url이 오고 두 번째 인자에 함수가 온다 url이 일치할 때만 use 메소드에 들어가고 첫 번째 인자를 생략할 경우에 모두 들어간다.
하지만 주의할 점은 next 메소드를 써야지만 다음으로 진행할 수 있다.
app.use(function (req, res, next) {
console.log('use 메소드에 진입');
next();
});
클라이언트의 특정 요청 method와 엔드포인트에 따라 다른 응답을 처리하는 것을 의미한다.
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 요청에 대한 응답
라우트를 생성해서 그 안에 경로 문자열에 콜론을 이용해서 변수나 경로 변수로 지정하게끔 하는 것이다.
// 경로에 콜론(:)을 사용해서 사용할 수 있다.
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 프로퍼티로 값을 사용할 수 있다.
app.get('/search' , (req,res) => {
const { q } = req.query;
res.send(`<h3>Search result for: ${q} </h3>`);
})

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