ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 제로부터 시작하는 Node.js - 9. Express 모듈 - 1
    내가 보기 위해 쓰는 것/Node.js 2019. 11. 6. 16:21

    Node.js 웹 서버를 개발할 때 가장 많이 사용되는 Express 모듈에 대해서 알아보겠습니다.

    http모듈처럼 내용이 꽤 방대함으로 나누어서 진행할 생각입니다.

     

    이 글에서는 미들웨어 개념까진 가지 않고 http모듈과의 차이, 추가 기능 등을 중심으로 기술하였습니다.

     

    1. 기본 서버

    우선 Express 모듈을 사용해 서버를 작성해봅시다.

     

    index.js 입니다.

     

    const express = require('express')
    const app = express()
    
    app.use(function (req, res) {
      res.writeHead(200, { 'Content-Type': 'text/html' })
      res.end('<h1>Hi</h1>')
    }).listen(3001, function (err) {
      console.log('server is running at http://127.0.0.1:3001')
    })
    

    http모듈을 이용해 만들 때와 별로 다를게 없습니다. 그러나 Express모듈은 http모듈 보다 더 많은 기능을 내장하고 있습니다. 

     

    2. 기본 메서드

    request 이벤트 리스너의 매개변수에 request, response 객체가 들어가죠?

    express모듈은 이 두 객체에 더 다양한 기능이 추가되어있습니다.

     

    2-1. response 객체

    express 모듈의 response 객체에는 아래 표의 메서드들이 추가되어있습니다.

    메서드 설명
    response.send(value) 매개변수의 자료형에 따라 적절한 형태로 보여줍니다.
    response.json(value) JSON형태로 리턴합니다.
    response.jsonp(value) JSONP의 형태로 리턴합니다.
    reponse.redirect(status, path) 웸 페이지의 경로를 이동합니다.

     

    send 메서드부터 살펴보겠습니다. 자료형에 따라 적절한 형태로 보여준다는게 무슨 뜻일까요?

    우선 정리해보자면 매개변수에 따라서 문자열은 HTML, 배열과 객체는 JSON형태로 보여줍니다.

     

    간단한 예제로 살펴보겠습니다.

     

    const express = require('express')
    
    const app = express()
    
    app.use(function (req, res) {
    
      let value = []
      for(let i = 0; i < 5; i++) {
        value.push({
          num: i,
          desc: 'its : ' + i
        })
      }
    
      res.send(value)
      
    }).listen(3001, function (err) {
      console.log('server is running at http://127.0.0.1:3001')
    })
    

    배열 데이터를 매개변수로 주니 JSON 형태로 결과를 보여주고있습니다.

     

    추가적으로 status라는 메서드를 상용하여 상태코드를 전달하는 법도 알아보겠습니다.

     

    const express = require('express')
    
    const app = express()
    
    app.use(function (req, res) {
    
      res.status(404).send('<h1>404: Page not found</h1>')
      
    }).listen(3001, function (err) {
      console.log('server is running at http://127.0.0.1:3001')
    })
    

    개발자 도구로 요청을 확인해봅시다.

     

    status code가 404로 되어있습니다.

     

    2-2. request 객체

    request 객체도 http모듈과 비교해서 새로운 메서드,속성들 이 있습니다. 살펴봅시다.

     

    메서드/속성 설명
    params 라우팅 매개변수 추출
    query 요청 매개변수 추출
    headers 요청 헤더 추출
    header() 요청 헤더의 속성 지정혹은 추출
    accepts(type) 요청 헤더의 Accept 속성 확인
    is(type) 요청 헤더의 Content-Type 속성 확인

     

    header(), headers 멤버를 예제로 들어보겠습니다

    유저가 http요청을 하면 User-Agent 속성이 반드시 붙음으로 User-Agent 속성을 추출해봅시다.

     

    const express = require('express')
    
    const app = express()
    
    app.use(function (req, res) {
    
      const agent = req.header('User-Agent')
      console.log(req.headers)
      console.log(agent)
      
    }).listen(3001, function (err) {
      console.log('server is running at http://127.0.0.1:3001')
    })
    

     

    브라우저로 서버에 접속해보고 터미널을 확인해봅시다.

     

    헤더의 정보를 가져오면 접속한 클라이언트의 브라우저 정보를 가지고 별도의 처리를 할 수 있겠네요.

     

    query속성으로 매개변수도 추출해봅시다.

     

    const express = require('express')
    
    const app = express()
    
    app.use(function (req, res) {
    
      const name = req.query.name
      const age = req.query.age
    
      res.send('<h1>' + name + ' - ' + age + '</h1>')
    
    }).listen(3001, function (err) {
      console.log('server is running at http://127.0.0.1:3001')
    })
    

     

    이렇게 입력 한 후 http://127.0.0.1:3001?name=이름&age=나이

    이렇게 주소창에 입력하여 접속하여봅시다.

     

    이 글은 여기까지입니다. 다음 글은 미들웨어입니다.

    댓글

Designed by Tistory.