es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Cómo escribir middlewares de manera efectiva en una aplicación Node estructurada MVC.

Estoy construyendo una aplicación de nodos que utiliza una estructura MVC. Como no tengo experiencia con la estructura MVC, estoy teniendo problemas para saber dónde colocar mis middlewares en esta arquitectura de manera efectiva.Resumen de la estructura:-

//Rutas de usuario
router.get('/fetchAllCourses/:schoolId', courseController.apiFetchCourses);

//Controlador
const courseServices = require('../services/courseService');

const courseCtrl = {};

courseCtrl.apiFetchCourses = async (req, res, next) => {
    try {
        const schoolId = req.params.schoolId;
        const fetchedCourses = await courseServices.fetchCourses(schoolId);
        !fetchedCourses ? res.status(404).send('Error en la búsqueda de la escuela') : res.send(fetchedCourses);
     } catch (error) {
        res.status(500).send('Error ocurrido,' + error.message);
     }
}

module.exprots = courseCtrl;

//Servicios
const courses = require('../models/Course'),
const courseService = {};

courseService.fetchCourses = async (schoolId) => {
    try {
        const foundSchool = await schools.findById(schoolId).populate('course');
        if (!foundSchool) return console.log('Error en la búsqueda de la escuela');
        return foundSchool.course;
    } catch (error) {
        console.log(`Error en la búsqueda del curso:  ${error}`)
    }
};

module.exports = courseServices;

Tengo un middleware que verifica el token de autenticación que viene del lado del cliente y después de la verificación pasa el cuerpo de la solicitud al controlador. Pero tengo problemas para saber dónde colocar mi middleware.

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    En una arquitectura MVC, el middleware puede ubicarse en la capa del controlador o la capa del enrutador.

    Si su middleware está directamente relacionado con la solicitud entrante, como la autenticación, tiene sentido colocarlo en la capa del enrutador antes del controlador. Esto asegura que el middleware siempre se ejecute primero y que las solicitudes autenticadas solo sean pasadas al controlador.

    Si su middleware está relacionado con los datos que se pasan al controlador, como la validación, tiene sentido colocarlo en la capa del controlador antes de la lógica empresarial. Esto asegura que los datos se validen antes de ser procesados por el controlador.

    En su caso, como el middleware verifica el token de autenticación, debe colocarse en la capa del enrutador antes del método courseController.apiFetchCourses. Esto se puede lograr llamando a la función del middleware antes del método en el enrutador.

    Por ejemplo:

    router.get('/fetchAllCourses/:schoolId', middlewareFunction, courseController.apiFetchCourses);
    

    Esto asegura que la función del middleware se ejecute antes del método del controlador y que solo se procesen las solicitudes autenticadas por el controlador.

Comments are closed.