[Node.js] Express 기본

민수·2022년 12월 14일
0
post-thumbnail

패키지 설치

npm init -y
npm install express

Express란?

  • Node.js 위에서 동작하는 웹 프레임 워크이다.

용어

  • 미들웨어(Middleware)
    • Express에서 미들웨어는 함수다.
    • 요청과 응답 중간에 위치하여 요청과 응답을 조작하거나 기능을 추가하기도 한다.
    • 요청을 받아서 응답을 보내기 전에 거쳐가는 함수라고 볼 수 있다.
    • next 호출을 통해 다음 미들웨어를 실행하도록 할 수 있다.
  • 라우팅(Routing)
    • Express에서 라우팅은 URI(또는 경로) 및 특정한 HTTP 요청 메소드(GET, POST 등) 같은 클라이언트 요청에 서버가 응답하는 방법을 결정하는 것을 말한다.

express()

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

Express를 실행 시키겠다는 의미이다.
Express를 모듈을 실행해 app 변수에 넣는다.

app.listen([port[,host[,backlog]]][,callback])

app.listen(3000, ()=>{
	console.log("Server Start")
})

지정된 포트 및 호스트에서 연결 요청을 대기하고 요청이 들어오면 연결을 해준다.

  • port(선택 사항)
    • 설정한 포트를 열어 TCP 연결을 대기한다.
    • 포트가 생략되거나 0이면 임의의 미사용 포트를 할당한다.
  • host(선택 사항)
    • 수신할 호스트의 IP 주소를 지정한다.
    • port를 설정해야 지정할 수 있다.
  • backlog(선택 사항)
    • 보류 중인 연결 대기열의 최대 길이를 지정한다.
    • 연결을 기다리는 대기 장소라고 볼 수 있다.
    • 기본값은 511이다.
    • porthost를 설정해야 지정할 수 있다.
  • callback(선택 사항)
    • 지정된 포트와 연결이 되면 실행할 함수를 지정한다.
    • porthost,backlog를 지정하지 않고 callback만 지정할 수 있다.

app.get(path, callback, [,callback ...])

app.get("/", (req, res) => {
  res.send("Hello World!")
})

HTTP GET 요청을 받고 요청받은 경로와 지정한 경로가 일치하면 콜백 함수를 실행한다.

  • path
    • 서버에서 지정한 경로(문자열)를 의미한다.
    • 기본값은 /(root path)다.
    • 클라이언트가 요청한 경로와 일치하면 미들웨어 기능이 호출된다.
  • callback
    • 클라이언트가 요청한 경로와 지정한 경로가 일치하면 실행되는 함수이다.
    • 미들웨어 기능을 한다.

app.get 활용

app.get("/", (req, res, next) => {
  console.log("First")
  next()
}, (req, res) => {
  console.log("Second")
  res.send("Hello World!")
});

callback 함수를 여러개 넣을 수 있다.
다음 미들 웨어가 실행될 수 있도록 next를 인자로 받아서 호출해줘야 한다.
next를 호출해주지 않으면 다음 미들 웨어로 넘어가지 않는다.
실행 결과는 브라우저에서 localhost:3000으로 들어오면 콘솔에 "First"와 "Second"가 순차적으로 찍히고 브라우저에 "Hello World!"가 보여지게 된다.

app.post(path, callback [,callback ...])

app.post("/", (req, res) => {
  res.send("Hello World!")
})

HTTP POST 요청을 받고 요청받은 경로와 지정한 경로가 일치하면 콜백 함수를 실행한다.

  • path
    • 서버에서 지정한 경로(문자열)를 의미한다.
    • 기본값은 /(root path)다.
    • 클라이언트가 요청한 경로와 일치하면 미들웨어 기능이 호출된다.
  • callback
    • 클라이언트가 요청한 경로와 지정한 경로가 일치하면 실행되는 함수이다.
    • 미들웨어 기능을 한다.

app.use([path,]callback[,callback...])

app.use("/", (req, res, next) => {
  console.log("Hello")
  next()
};

모든 HTTP Method 요청에 요청받은 경로와 지정한 경로가 일치하면 콜백 함수를 실행한다.

  • path
    • 서버에서 지정한 경로(문자열)를 의미한다.
    • 기본값은 /(root path)다.
    • 경로를 넣어주지 않으면 모든 요청에 미들웨어를 실행한다.
    • 클라이언트가 요청한 경로와 일치하면 미들웨어 기능이 호출된다.
  • callback
    • 클라이언트가 요청한 경로와 지정한 경로가 일치하면 실행되는 함수이다.
    • 미들웨어 기능을 한다.

미들웨어 기능은 순차적으로 실행되므로 순서가 중요하다!

app.set(name, value)

app.set("title", "My Site")

app 객체안에 settings 속성에 새로운 속성을 지정한다고 볼 수 있다.

  • name
    • 객체의 key 값이라 볼 수 있다.
  • value
    • 객체의 value 값이라 볼 수 있다.
    • value 값은 어떤 값이라도 저장 할 수 있다.
    • 특정 이름을 사용하면 서버의 동작을 구성할 수 있다. [예시] app.set("view engine", "html")

app.get(name)

console.log(app.get("title"))

app.settings 객체에서 값을 가지고 올 수 있다.

  • name
    • app.settings 객체에서 가지고 오고 싶은 키 값을 적어주면 된다.
console.log(app.settings)

express.static(root, [options])

app.use(express.static('public'));

CSS, Javascript 파일등 정적 파일을 제공하기 위해 사용한다.

  • root
    • 정적 파일을 제공할 디렉토리를 지정한다.
  • options(선택 사항)

express.static 활용

app.use('/static', express.static('public'))

public 디렉토리 안에 있는 파일을 로드 할 때 가상의 경로인 static을 붙여 줘야 로드가 된다.
http://localhost:3000/static/css/style.css

const path = require('path')
app.use('/static', express.static(path.join(__dirname, 'public')))

node를 다른 디렉토리에서 실행하는 경우에는 위처럼 절대 경로를 사용하는게 안전하다.

express.urlencoded([options])

app.use(express.urlencoded({extended: false}))

요청의 body에 있는 데이터를 해석해서 req.body 객체로 만들어주는 Express에 내장된 미들웨어다.
주로 Form 데이터나 AJAX 요청의 데이터를 처리한다.
이미지, 동영상, 파일 데이터는 처리하지 못한다.

  • options(선택 사항)
    • extended
      • false : Node의 querystring 모듈을 사용하여 쿼리스트링을 해석한다.
      • true : qs 모듈을 사용하여 쿼리스트링을 해석한다. (querystring 모듈의 기능을 확장한 외장 모듈)

res.status(code)

res.status(404).send('Not Found')

응답에 대한 HTTP 상태코드를 설정한다.

  • code
    • HTTP 상태코드를 넣어주면 된다.

res.send([body])

res.send(Buffer.from("hello"))
res.send({ apple : "mac"})
res.send("<h1>Hello World</h1>")
res.status(404).send('Not Found')

HTTP 응답을 보낸다.

  • body
    • Buffer Object, String, Object, Boolean, Array를 넣을 수 있다.

res.redirect([status,] path)

res.redirect(301, 'https://velog.io/@cloudcoke')
  • status(선택 사항)
    • HTTP 상태 코드를 적어주면 된다.
    • 기본 값은 302다.
  • path
    • 해당 경로로 페이지를 이동시킨다.

참고

0개의 댓글