繁体   English   中英

使用 express-validator 验证表单数据数据

[英]Validate form-data data with express-validator

我遇到的问题是,当我在 postman 中发送空数据或完整数据时,express-validator 没有验证来自表单数据的数据,它总是向我显示我在 express-validator 中验证的错误并且它不正确。

你认为解决这个问题的方法是什么? 快速验证器中是否有另一种方法来验证表单数据? 非常感谢您提前

index.js

//Importar express
const express = require('express');
//Importar cors
const cors = require('cors');
//Importar DB
const connectDB = require('./config/db');

//Crear servidor
const app = express();

//Habilitar cors
app.use(cors());

//Conectar DB
connectDB();

//Habilitar body parser
app.use(express.urlencoded({ extended: true }));

//Habilitar express.json
app.use(express.json());

//Habilitar carpeta publica
app.use(express.static('uploads'));

//Puerto de la app
const port = process.env.PORT || 4000;

app.use('/api/schools', require('./routes/schools'));

app.listen(port, '0.0.0.0', () => {
    console.log(`El servidor funciona en el puerto ${port}`)
})

路由器 school.js

const express = require('express');
const router = express.Router();
const {check} = require('express-validator')
const schoolController = require('../controllers/schoolController');


router.post('/',
    [
        check('name', 'El nombre es obligatorio').not().isEmpty(),
        check('email', 'Agrega un email valido').isEmail(),
    ],
    schoolController.uploadLogo,
    schoolController.newSchool
)

module.exports = router;

Controller schoolController.js

const School = require('../models/School');
const { validationResult } = require('express-validator');

exports.newSchool = async (req, res) => {
    const error = validationResult(req);
    if(!error.isEmpty()){
       return  res.status(400).json({error: error.array()})
    }

    try {
        const{email} = req.body;
        let user = await School.findOne({ email });
        if (user) {
            return res.status(400).json({msg: 'El usuario ya existe'})
        }
        user = new School(req.body);
        await user.save();
        res.json({msg: 'Escuela creada exitosamente'});
    } catch (error) {
        console.log(error);
    }
}

我像这样实现了我的 controller 代码,它可以工作:


    const { check, validationResult } = require("express-validator");

    app.post('/', 
        check('name', 'El nombre es obligatorio').not().isEmpty(),
        check('email', 'Agrega un email valido').isEmail(),(req, res ) => {
      const errors = validationResult(req);
      if(!errors.isEmpty()){
        res.render( '/', {errors:errors.array(), success:false}, (err, html) => {res.send(html)})
      }
      else{
         // process request
      };
  });

为什么在所有检查完你的路由后不使用一个小的中间件呢? 假设您有一个像myValidation.js这样的 mware 文件

const { validationResult } = require('express-validator');

const myValidation = async  (req, res, next)=>{
    const has_errors = validationResult( req );
    if(!has_errors.isEmpty()){
        // Show your error message here, i.e,
        return res.status(400).json(has_errors);
    }
    next();
}

module.exports = {
    myValidation
}

您可以在学校路线上按以下方式使用它:

const express = require('express');
const router = express.Router();
const {check} = require('express-validator');
const { myValidation} = require ('./myValidation.js'); // mware

const schoolController = require('../controllers/schoolController');


router.post('/',
    [
        check('name', 'El nombre es obligatorio').not().isEmpty(),
        check('email', 'Agrega un email valido').isEmail(),
        myValidation
    ],
    schoolController.uploadLogo,
    schoolController.newSchool
)

module.exports = router;

萨鲁2

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM