IIC2513-2018-1 / syllabus

Material del curso
11 stars 10 forks source link

Bug en declaración de middlewares #31

Closed lucasmarinb closed 6 years ago

lucasmarinb commented 6 years ago

Cuando hacía el middleware para la vista users/new, el navegador me tiró un Internal Server Error con la siguiente descripción del error:

<-- GET /courses/new Executing (default): SELECT "id", "code", "name", "createdAt", "updatedAt" FROM "courses" AS "course" WHERE "course"."id" = @'new'; xxx GET /courses/new 500 31ms - SequelizeDatabaseError: invalid input syntax for integer: "new"

Sin embargo, en ningún momento estoy haciendo una búsqueda a la base de datos con esas características. Aquí la muestra del código implementado:

router.get('users.new', '/new', async (ctx) => { const user = ctx.orm.user.build(); await ctx.render('users/new', { user, submitUserPath: ctx.router.url('users.create'), }); });

Lo extraño del asunto es que el problema se solucionó cuando cambié el orden en que declaraba los middlewares, es decir, si pongo primero el middleware asociado a la ruta "users/new" y luego el de la ruta "users/show" no ocurre.

Nota: Reproduje el error en otros routers simplemente cambiando el orden de declaración de los middlewares.

Me gustaría saber si alguien tiene un pista de lo que puede estar provocando este bug.

iqacevedo commented 6 years ago

Hola,

Esto ocurre porque cuando en uno de los middleware tiene como ruta /:id el id será todo lo que tiene después de /. Si tienes el middleware de show me imagino que tenías esto en la ruta, entonces cuando se llama a la ruta hace match con ese que esta primero y se ingresa a la router que tienes asociado con el id=new.

Al cambiarlo de orden y bajar este middleware haces que antes haga match con la ruta /new y tienes el comportamiento que realmente esperas.

Espero que quedara claro.

Saludos !

lucasmarinb commented 6 years ago

Buena, ya entendí!