Tengo un módulo con Rutas en él. Quiero verificar el acceso antes de permitir que el usuario avance. En el módulo Rutas, tengo dos rutas y dos funciones de verificación de acceso que me gustaría usar como middleware:
const doesUserExist = (req, res, next) => { if (!users[req.params.id]) { res.send(`Такого пользователя не существует`); return; } next(); } const doesCatExist = (req, res, next) => { if (!cats[req.params.id]) { res.send(`Такой кошечки не существует`); return; } next(); } dbAccess.get('/users/:id', (req, res) => { const { name, age } = users[req.params.id]; res.send(`Пользователь ${name}, ${age} лет`); }); dbAccess.get('/cats/:id', (req, res) => { const { nickName, color } = cats[req.params.id]; res.send(`Кошечка ${nickName}, ${color} цвет`); });Luego exporto estos middlewares al archivo principal y los uso de la siguiente manera:
app.use('/users/:id', doesUserExist); app.use('/', dbAccess); app.use('/cats/:id', doesCatExist); app.use('/', dbAccess); Sin ninguna razón para mí, solo funciona el primer middleware. Si trato de ingresar la identificación de cat que no existe, aparece un error TypeError: Cannot destructure property 'nickName' of 'cats[req.params.id]' as it is undefined. , por lo que el segundo middleware no funciona en absoluto y no se verifica el acceso. Creé otro módulo de rutas con otra ruta y middleware y lo usé en el archivo principal también y funciona :
app.use('/users/:id', doesUserExist); app.use('/', dbAccess); app.use('/cats/:id', doesCatExist); app.use('/', dbAccess); app.use('/testpage', doesHaveAccess); app.use('/testpage', testPage);Una solicitud GET /cats/1
app.use('/users/:id', doesUserExist) , porque la ruta no coincideapp.use('/', dbAccess) , porque / coincide con todas las rutasdbAccessdbAccess.get('/users/:id', ...) , porque la ruta no coincidedbAccess.get('/cats/:id', ...) , porque la ruta coincide. Esto conduce al error que observó, porque cats[req.params.id] === undefined .app.use('/cats/:id', doesCatExist) .Deberías escribir
app.use('/users/:id', doesUserExist); app.use('/cats/:id', doesCatExist); app.use('/', dbAccess);