[英]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.