BackEnd/Node.js

Node.js) express로 간단한 CRUD 만들기 | 라우터, 컨트롤러(router, controller)

namhj 2022. 10. 14. 14:56
반응형

controller 구현

  • 먼저 간단하게 유저정보를 CRUD를 수행하는 콘트롤러를 구현한다.
  • 데이터의 실질적인 CRUD 작업을 수행한다.

 

controllers/user.js

import { v4 as uuidv4 } from "uuid";

// 지금 단계에서는 데이터베이스와 연결은 안되어 있으므로
// 데이터를 조작할 변수를 선언해준다.
let users = [];

//모든 users 내용을 출력해주는 함수
//get all users
export const getUsers = (req, res) => {
    console.log(`get request users`);
    res.send(users);
}

//특정 id값을 받아서 해당 유저의 내용만 출력하는 함수
//get a user
export const getUser = (req, res) => {
    const { id } = req.params;
    const foundUser = users.find((user) => user.id === id);
    res.send(foundUser);
}

//새로운 유저 정보를 입력하는 함수
//create a user
export const createUser = (req, res) => {
    const user = req.body;
    users.push({ ...user, id: uuidv4() });
    res.send(`User with the name ${user.name} added to the database`);
}

//특정 id값을 받아서 해당 유저를 삭제하는 함수
//delete a user
export const deleteUser = (req, res) => {
    const { id } = req.params;
    users = users.filter((user) => user.id !== id);
    res.send(`User with the id ${id} deleted from the database`);
}

//특정 id 값을 받아서 해당 유저의 정보를 수정하는 함수
//update a user
export const updateUser = (req, res) => {
    const { id } = req.params;
    const { name, age } = req.body;
    const user = users.find((user) => user.id === id);
    if (name) {
        user.name = name;
    }
    if (age) {
        user.age = age;
    }
    res.send(`User with the id ${id} has been updated`);
}

Router의 구현

  • 요청에 따른 위의 함수를 수행하기 위해서 라우터를 구현해준다.
  • 요청은 /users 로 시작하도록 하는데, 여기에서는 users이후의 요청 방식만 정의해준다.

 

routes/users.js

//라우터 기능 사용을 위해 임포트
import express from "express";

//각 컨트롤러와 라우터 연결을 위해서 컨트롤러에 정의된 함수들을 임포트
import { getUsers, getUser, createUser, deleteUser, updateUser } from "../controllers/users.js";

//라우터 생성
const router = express.Router();

//이곳에 정의된 라우터는 /users로 요청 URL을 시작하도록 할 것이지만, 
//index.js에서 정의해줄 것이므로 /users이후의 요청을 정의해준다.

//get요청에 파라미터가 없으면 모든 유저를 출력하는 함수를 실행 한다
//get all users
router.get("/", getUsers);

//get요청에 아이디 파라미터가 있으면 해당 유저만 출력하는 함수 실행
//get a user
router.get('/:id', getUser);

//post요청에 파라미터가 없으면 유저를 생성하는 함수 실행
//대신 요청할때 body에 생성할 데이터를 넣어줘야함
//create a user
router.post('/', createUser);

//delete요청에 아이디 파라미터가 있으면 해당 유저를 삭제하는 함수 실행
//delete a user
router.delete('/:id', deleteUser);

//patch요청에 아이디 파라미터가 있으면 해당 유저 정보를 수정하는 함수 실행
//update a user
router.patch('/:id', updateUser);

export default router;

 


Index.js에 Routes 포함시키기

import express from 'express';
import usersRoutes from './routes/users.js';//정의된 user라우터를 포함시키기
import bodyParser from 'body-parser';

const app = express();
const PORT = 5000;

app.use(bodyParser.json());

//usersRoutes를 사용, 그리고 '/users'로 요청하도록 설정
app.use('/users', usersRoutes);

app.get('/', (req, res) => {
    res.send('Hello from Hompage!');
});

app.listen(PORT, () => console.log(`Listening on port ${PORT}`));

소스코드 참고

https://github.com/nowispresent/tutorials/blob/main/nodeJS/expressTutorial/index.js

 

GitHub - nowispresent/tutorials: tutorials

tutorials. Contribute to nowispresent/tutorials development by creating an account on GitHub.

github.com


 

참고한 강의 영상

https://www.youtube.com/watch?v=l8WPWK9mS5M&t=718s&ab_channel=JavaScriptMastery

반응형