Giúp đỡ về express-validator...



  • Em chào mọi người, em mới học NodeJs được vài ngày ạ.
    Hôm nay e tìm hiểu về express-validator nên mình có một thắc mắc sau ạ:
    E có đoạn code như sau, và có một form submit:

     <form action="/login" method="POST">
        <div class="form-group">
          <label for="user">Username:</label>
          <input type="text" class="form-control" name="username" placeholder="Enter your username">
        </div>
        <div class="form-group">
          <label for="password">Password:</label>
          <input type="password" class="form-control" name="password" placeholder="Enter your password">
        </div>
        <button type="submit" class="btn btn-dark">Login</button>
    </form>
    
    const { check, validationResult } = require('express-validator/check');
    const { matchedData, sanitize }   = require('express-validator/filter');
    
    app.post('/login', [
      check('username').exists(),
      check('password').exists()
    ], (req, res, next) => {
      const errors = validationResult(req);
      if(!errors.isEmpty()) {
        console.log('Errors');
      } else {
        console.log('Not Errors');
      }
    });
    

    Ý e là e muốn validation và thông báo lỗi nếu người dùng ấn Login mà không ghi gì.. [require] ấy ạ...

    • E chạy nó kg lên được ạ. Ai có thể giúp e được kg ạ.


  • @Nguyễn-Minh-Tuấn
    Bạn log data. req.body cho mọi người xem với. Phần này năm ở backend thì bạn nên show log cho mọi người nha. Còn lại thì mình nghĩ bạn thiếu 1 middle-ware là https://github.com/expressjs/body-parser. Thằng body parse này sex parse data fỏrm bạn vào req.body. Lúc này khi express validator sẽ quét headers, body, params, query của req url endpoint mới thấy trong phần body.

    app.use(bodyParser.urlencoded({ extended: false })); // This line with parse data x-form-urlencode to req.body
    const { check, validationResult } = require('express-validator/check');
    const { matchedData, sanitize }   = require('express-validator/filter');
    
    app.post('/login', [
      check('username').exists(),
      check('password').exists()
    ], (req, res, next) => {
      const errors = validationResult(req);
      if(!errors.isEmpty()) {
        console.log('Errors');
      } else {
        console.log('Not Errors');
      }
    });
    

    Sent from Rodgers Zone!!!

    1


  • @Nguyen-Hien Mình có require body-parser vào rồi bạn ạ...
    Làm đủ mọi cách nhưng vẫn không hiểu sao nó không chạy được.
    Giờ mình dùng cách cổ điển, cách lâu rồi thì được...
    Mình muốn dùng cách mới nhất thì chưa được ạ...

    const express     = require('express');
    const path        = require('path');
    const bodyParser  = require('body-parser');
    const expressValidator = require('express-validator');
    
    const app = express();
    
    app.set('views', path.join(__dirname, 'views'));
    app.set('view engine', 'ejs');
    
    app.use(bodyParser.json());
    app.use(bodyParser.urlencoded({extended: false}));
    app.use(express.static(path.join(__dirname, 'public')));
    
    app.use((req, res, next) => {
      res.locals.err = null;
      res.locals.errors = null;
      res.locals.username = null;
      res.locals.password = null;
      next();
    });
    
    app.use(expressValidator({
      customValidators: {
        errorFormatter: (param, msg, value) => {
          const namespace = param.split('.')
              , root      = namespace.shift()
              , formParam = root;
          while(namespace.length) {
            formParam += '[' + namespace.shift() + ']';
          }
          return {
            param : formParam,
            msg   : msg,
            value : value
          };
        }
      }
    }));
    
    app.get('/', (req, res) => {
      res.render('index');
    });
    
    app.post('/login', (req, res) => {
      req.checkBody('username', 'Username must be require').notEmpty();
      req.checkBody('password', 'Password must be require').notEmpty();
      const errors = req.validationErrors();
      if(errors) {
        res.render('index', {
          errors: errors,
          username: req.body.username,
          password: req.body.password
        })
      } else {
        res.send('Not Errors');
      }
    });
    
    app.listen(3000, () => {
      console.log('Server started on port 3000');
    });
    

    Nguyên code phần app.js của mình ạ



  • Bạn nên sử dụng AJAX trên form để gửi và nhận kết quả.
    https://stackoverflow.com/questions/374644/how-do-i-capture-response-of-form-submit


Log in to reply