Так что я не совсем уверен, достаточно ли описательный заголовок, но вот очень простой пример.
Мой сайт имеет общедоступную c область и ограниченную область администратора.
example.com/admin
(домашняя страница администратора)
example.com/admin/news
(страница новостей)
example.com/admin/posts
(страница сообщений)
И потому что я не хочу, чтобы люди не были администраторами или вошел в систему, чтобы получить доступ к нему, у меня есть простая функция промежуточного программного обеспечения для проверки файлов cookie.
приложение. js
const express = require('express');
const app = express();
const authMiddleWere = async (req, res, next) => {
// pseudo-code, do some cookie validity check here
console.log(`Route: ${req.url}`)
if (cookie) {
next();
}
};
const adminRouter = require('./routes/private/home');
const newsRouter = require('./routes/private/news');
const postsRouter = require('./routes/private/posts');
app.use('/admin/', authMiddleWere, adminRouter);
app.use('/admin/news', authMiddleWere, newsRouter);
app.use('/admin/posts', authMiddleWere, postsRouter);
/ маршруты / частные / домашние. js
const express = require('express');
const router = express.Router();
router.get('/', async (req, res, err) => {
res.render('private/home');
});
module.exports = router;
Проблема здесь в том, что эта функция authMiddleWere
вызывается дважды, когда я посещаю вложенные пути, такие как example.com/admin/news
, которые используют один и тот же шаблон - это начинается с /admin/.....
.
Я могу сказать это наверняка, потому что мы регистрируем req.url
в нашей функции промежуточного программного обеспечения, поэтому, если я go до example.com/admin
, он выйдет из системы:
Route: /
Но если я go до example.com/admin/news
, он выйдет из системы:
Route: /
Route: /news
Так что вызывает это и как мне обойти это? Я предполагаю, что то, что я описал, является предполагаемым поведением Express. js, поэтому я ищу способ обойти это или (ре) структурировать мой код лучше.
Cheers!