본문 바로가기
Node.js

라우터 설정

by 세인트킴 2024. 2. 16.

node.js 강의를 한번 듣고나서 복습을 위해 처음부터 다시 해보고 있다. 그러던 중 저번 강의때는 server.js파일안에 모든 get, post, put, delete 등 많은 라우터를 한 파일에 넣어서 사용했더니, 가독성이 정말 문제가 많고 어느 부분에는 이상한 자료가 생기고 어디가 오류가 발생하는지 쉽게 알지 못해서 이번 복습할 때는 라우터를 이용해 정리하고 넘어가도록 해야겠다.

const express = require('express')
const post = require('./router/routs')
const app = express()
const PORT = 8080

app.use('/post_page', post)

app.listen(PORT, () => {
  console.log(`http:${PORT} 에서 서버 실행중`)
})

post변수에 router/routs파일을 불러온다. router폴더 안에 routs.js가 들어있지만, 확장자를 붙이면 오류가 발생하기 때문에 확장자를 제거하고, use키워드를 통해 '/post_page'를 접속하면 post변수를 자동으로 불러온다. post_page 경로가 바뀌면 404 Error이 발생하기 때문에 저 부분을 신경써준다. 즉, 기본경로라는것.

const express = require('express')
const router = express.Router()
const bodyParser = require('body-parser')

router.use(bodyParser.json())
router.use(bodyParser.urlencoded({ extended : true }))

router.get('/', (req, res) => {
  try {
    res.render('routs.ejs')
  } catch(err) {
    console.error(err)
  }
})

router.post('/', (req, res) => {
  let id = req.body.id
  let pwd = req.body.pwd
  let title = 'Post page'
  console.log("id : ", id)
  console.log("pwd : ", pwd)
  res.send(
    `<h1>${title}</h1>
    <p>당신의 아이디는 ${id}</p>
    <p>당신의 비밀번호는 ${pwd}</p>`
  )
})

module.exports = router
  • express를 설치하면 Router가 같이 설치되므로, 추가설치할 필요는 없지만 로딩할 때, router = express.router()를 통해 불러와야 사용할 수 있다. 
  • body-parser가 설치되어 있지 않다면, 요청을 통해 값을 넣을 때 body.id, body.pwd를 넣을 수 없다. body-parser.json()은 본문의 body가 json형태로 되어있다면 이것을 파싱해서 자바스크립트 객체 형태로 받을 수 있도록 한다. urlencoded는 url형태로 되어있다면 url을 파싱해서 body에 저장한다. urlencoded가 없다면 html을 통해 전송된 자료를 읽어올 수 없다. post 요청의 경로가 '/post_page'로 전송되기 때문에 urlencoded도 필요하다. 즉, 둘 다 필요하다.
  • router.get()을 통해 routs.ejs파일을 전송해서 보여주도록 한다. 
  • router를 module.exports하면, server.js에서 post라는 변수에 저장된 router를 불러와서 사용할 수 있도록 해준다. 즉, 라우터 폴더 밑의 경로들을 사용할 수 있도록 해준다.

동작

server.js파일에서 use()를 사용해 'post_page'경로를 지정하고나면 자동으로 post변수의 routs.js파일을 실행한다. 그러면 routs.js파일에 정의된 router.get(), router.post() 함수를 실행해서 클라이언트에게 전송한다. 

 

get요청은 routs.ejs파일을 불러와서 페이지를 보여주고, post요청은 routs.ejs파일 안에 있는 action경로가 'post_page'이기 때문에 'post_page'경로로 form의 body를 전송해준다.

 

routs.ejs의 action의 경로와 server.js의 use()키워드에서 'post_page'경로가 일치해야 제대로 작동한다. 만약 둘이 다르면 전송은 다른곳에 하고, 페이지에는 변화가 없다. 

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

list.js Router - 404 Error  (0) 2024.02.16
MongoDB Router 연결  (1) 2024.02.16
server.js  (0) 2024.02.10
Login - MongoDB  (0) 2024.02.09
MongoDB 비밀번호 암호화  (2) 2024.02.06