I have the problem that express-validator is not validating my data that comes from form-data when I send it empty or full data in postman it always shows me the errors that I validate in express-validator and it is not correct.
What do you think is the solution for this? Is there another method in express validator to validate form-data? Thank you very much in advance
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}`)
})
Router 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);
}
}
I implemented my controller code like this and it works:
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
};
});
Why not use a small middleware after all the checks an your route? Lets say you have a mware file like myValidation.js
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
}
and you could use it as follows on your school route:
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;
Salu2
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.