我想为每个路由添加验证,但在另一个中间件中获取validationResult。我的代码是:
AuthValidation.js
const { check } = require('express-validator');
module.exports = {
login: [
check("email").notEmpty().withMessage("Email is required").isEmail().withMessage("Enter a valid email"),
check("password").notEmpty().withMessage("Password is required")
]
};
验证中间件.js
const { validationResult } = require("express-validator");
module.exports = function (req, res, next) {
const errors = validationResult(req);
if (!errors.isEmpty()) {
return res.status(400).json({ errors: errors.array({ onlyFirstError: true }) });
}
next();
};
AuthRoute.js
const express = require("express");
const router = express.Router();
const AuthController = require("../controllers/AuthController");
const AuthValidation = require("../validations/AuthValidation");
const validationMiddleware = require("../middleware/ValidationMiddleware");
router.post("/", [AuthValidation.login, validationMiddleware], AuthController.loginUser);
module.exports = router;
index.js
const express = require("express");
const conectarDB = require("./config/DBConfig");
const cors = require("cors");
const errorHandler = require("./middleware/ErrorHandlerMiddleware");
//Crear el servidor
const app = express();
//Conectar a la BD
conectarDB();
//Habilitar cors
app.use(cors());
//Habilitar express.json
app.use(express.json({ extended: true }));
//Puerto de la app
const PORT = process.env.PORT || 4001;
//Rutas
app.use("/api/user", require("./routes/UserRoute"));
app.use("/api/auth", require("./routes/AuthRoute"));
//Middleware de errores
app.use(errorHandler);
//Arrancar el app
app.listen(PORT, () => {
console.log(`El servidor está funcionando en el puerto ${PORT}`);
});
上面的代码工作正常,但我必须为每条路由添加validationMiddleware
。您知道我在AuthRoute.js
中编写了router.post("/", [AuthValidation.login, validationMiddleware], AuthController.loginUser);
,但我不想为每条路由的中间件添加validationMiddleware
。我试着在index.js
中添加validationMiddleware
,就像这样:
AuthRoute.js
const express = require("express");
const router = express.Router();
const AuthController = require("../controllers/AuthController");
const AuthValidation = require("../validations/AuthValidation");
router.post("/", [AuthValidation.login], AuthController.loginUser);
module.exports = router;
index.js
const express = require("express");
const conectarDB = require("./config/DBConfig");
const cors = require("cors");
const errorHandler = require("./middleware/ErrorHandlerMiddleware");
const validationMiddleware = require("./middleware/ValidationMiddleware");
//Crear el servidor
const app = express();
//Conectar a la BD
conectarDB();
//Habilitar cors
app.use(cors());
//Habilitar express.json
app.use(express.json({ extended: true }));
//Puerto de la app
const PORT = process.env.PORT || 4001;
//Rutas
app.use("/api/user", require("./routes/UserRoute"));
app.use("/api/auth", require("./routes/AuthRoute"));
app.use(validationMiddleware);
//Middleware de errores
app.use(errorHandler);
//Arrancar el app
app.listen(PORT, () => {
console.log(`El servidor está funcionando en el puerto ${PORT}`);
});
上面的代码不执行validationMiddleware
。提前谢谢。
我认为这里的问题是您在哪里使用了中间件
//Rutas
app.use("/api/user", require("./routes/UserRoute"));
app.use("/api/auth", require("./routes/AuthRoute"));
app.use(validationMiddleware);
中间件应该在路由之前:
app.use(validationMiddleware);
//Rutas
app.use("/api/user", require("./routes/UserRoute"));
app.use("/api/auth", require("./routes/AuthRoute"));