validation

유석현(SeokHyun Yu)·2022년 12월 7일
0

Node.js

목록 보기
19/29
post-thumbnail

app.js

import express from "express";
import helmet from "helmet";
import morgan from "morgan";
import cors from "cors";
import tweetController from "./tweet/tweet.controller.js";

const app = express();

app.use(express.json());
app.use(morgan("dev"));
app.use(helmet());
app.use(cors());

app.use("/tweet", tweetController);

app.use((req, res, next) => {
    res.sendStatus(404);
});

app.use((err, req, res, next) => {
    res.sendStatus(500);
});

app.listen(8000);

Controller

import express from "express";
import * as tweetService from "./tweet.service.js";
import { body } from "express-validator";
import { validate } from "../middleware/validator.js";

const tweetController = express.Router();

// text가 5글자 이상인지 검사하는 validator
const textValidator = [
  body("text")
    .trim()
    .isLength({ min: 5 })
    .withMessage("text를 최소 5 글자 이상 입력해주세요."),
  validate,
];

// 전체 조회
tweetController.get("/", tweetService.getTweets);

// 상세 조회
tweetController.get("/:id", tweetService.getTweet);

// 트윗 생성
// textValidator 미들웨어 추가
tweetController.post("/", textValidator, tweetService.createTweet);

// 트윗 수정
// textValidator 미들웨어 추가
tweetController.put("/:id", textValidator, tweetService.updateTweet);

// 트윗 삭제
tweetController.delete("/:id", tweetService.deleteTweet);

export default tweetController;

validator.js

import { validationResult } from "express-validator";

export const validate = (req, res, next) => {
  // "express-validator"에서 req에 넘겨준 validation 결과를 validationResult()로 가져올 수 있다
  const errors = validationResult(req);

  if (errors.isEmpty()) {
    next();
  } else {
    res
      .status(400)
      .json({ error: errors.array().map((error) => ({ message: error.msg })) });
  }
};

POST: http://localhost:8000/tweet (201)

  • "text"가 5글자 미만일 경우
  • "text"가 5글자 이상일 경우

PUT: http://localhost:8000/tweet/1 (200)

  • "text"가 5글자 미만일 경우
  • "text"가 5글자 이상일 경우
profile
Backend Engineer

0개의 댓글