【Node.js express】express-validator로 검증을 구현하고 통과한 값을 세션에 저장한다.

10853 단어 ExpressNode.js
이하의 항목을 만족하는 밸리데이션을 express-validator로 구현해 본다.
템플릿 엔진은 ejs. 프레임워크는 express
  • 암호가 7자 이상
  • 암호가 확인용과 일치합니다
  • 모든 항목이 입력되었습니다
  • 문제 없으면 홈 화면으로

  • 현재 상황
    가입 전면 페이지 작성


    1) express-validator를 설치합니다.



    Dockerfile에 빌드시 express-validator를 설치하도록 설명.

    참고
    htps : // 코 m / 쇼_우 / ms / 0에 f3dfc7b07b5에 13 18
    #express-validatorを追記
    
    RUN npm install ejs\
      express-validator
    

    2) express-validator를 require한다. (분할 할당)



    users.js
    const { check, validationResult } = require('express-validator');
    

    const check = 유효성 검사를 수행하는 함수
    const validationResult = 실행 결과에 대한 정보 등을 관리하는 ResultFactory라는 객체를 생성하는 함수

    가 저장됩니다.

    3) 라우팅의 두 번째 인수에 조건 추가



    users.js
    [
      // checkメソッドを使用してバリデーションを実行
      // withMessageメソッドで弾かれた場合のmsgを設定
    
      check('name').not().isEmpty().withMessage('nameEmpty'),
      check('email').not().isEmpty().withMessage('emailEmpty'),
      check('password').not().isEmpty().withMessage('passwordEmpty'),
      check('password').isLength({ min: 7 }).withMessage('passwordUnder7'),
      //バリデーションをカスタムで作成
      check('password').
        custom((value, { req }) => {
          //一致した場合trueを返す
          if (req.body.password === req.body.confirmPassword) {
            return true;
          }
        }).withMessage('passwordNoMach')
    ],
    

    4) 라우팅의 세 번째 인수에 유효성 검사 오류 처리 (클로저) 추가



    users.js
      function (req, res, next) {
        //結果をerrorsに格納
        const errors = validationResult(req);
        //引っ掛かった場合
        if (!errors.isEmpty()) {
          console.log(errors)
        }
    

    console.log에서 errors 내용을 확인하십시오.
    Result {
    formatter: [Function: formatter],
       errors: [
         { 
           value: '', 
           msg: 'nameEmpty', 
           param: 'name', 
           location: 'body' 
         },
         { 
           value: '', 
           msg: 'emailEmpty', 
           param: 'email', 
           location: 'body' 
         },
         {
           value: '1',
           msg: 'passwordUnder7',
           param: 'password',
           location: 'body'
         },
         {
           value: '1',
           msg: 'passwordNoMach',
           param: 'password',
           location: 'body'
         }
       ]
     }
    

    errors:errors:{}로 저장됩니다.

    세 번째 인수의 전체 처리

    users.js
      function (req, res, next) {
        const errors = validationResult(req);
        //エラーオブジェクトをerrorsに格納。
        if (!errors.isEmpty()) {
          let messages = [];
          errors.errors.forEach((error) => {
            messages.push(error.msg);
          //配列に格納
          });
          res.render('users/signup', { messages: messages })
        } else {
          req.session.name = req.body.name;
          //セッションに格納
          res.redirect("/home");
        }
      });
    

    express-session 모듈을 이용한다.
    //インストール
    npm install express-session
    

    app.js
    //追記
    const session = require("express-session");
    
    //appオブジェクトにsession設定を組み込む。
    // app = express()とルーティング設定の範囲に記載
    app.use(session({
      secret: "secretWord",
      resave: false,
      saveUninitialized: true,
      cookie: { maxAge: 10 * 1000 }
    }));
    

    session({옵션})에서 express-session을 설정한다.

    secret:
    쿠키에 저장할 세션 ID를 서명하는 데 사용되는 비밀 단어.

    resave
    세션을 세션 저장소에 강제로 저장할지 여부를 설정합니다.

    saveUninitialized
    초기화되지 않은 세션을 강제로 저장할지 여부를 설정합니다.

    쿠키
    세션 ID의 쿠키 설정을 지정할 수 있습니다. maxAge: 보존 기간.

    좋은 웹페이지 즐겨찾기