如何在NodeJS中使用express来分离用于验证和validationResult的中间件



我想为每个路由添加验证,但在另一个中间件中获取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"));

最新更新