Исключить общую папку из маршрутизатора Express - PullRequest
1 голос
/ 14 октября 2019

Я хочу исключить папку public и все статические файлы и подпапки из экспресс-маршрутизатора.

В настоящее время я определил 1) общую папку, 2) маршрутизатор, как предложено в нескольких SF ответы:

        // public folder
        self.app.use(express.static(path.join(__dirname, 'public')));

        // static pages
        self._options.staticRoutes.forEach(route => {
            self.app.use(BASEPATH + route, express.static(path.join(__dirname, 'public')));
        });

        // register page renderer
        router.get(BASEPATH, renderer.render());

        // templates
        self._options.routes.forEach(route => {
            self.app.use(BASEPATH + route, router);
        });
        // router
        self.app.use(BASEPATH, router);

        // register error handlers
        self.app.use(renderer.logErrors());
        self.app.use(renderer.clientErrorHandler());
        self.app.use(renderer.catchAll());

Позже у меня есть все, что проверяет логин пользователя:

       self.app.use(function (req, res, next) {
            var redirect_uri = '/login';
            if (req.user) {
                return next();
            } else {
                return res.redirect(redirect_uri);
            }
        });

Этот маршрут вызывает перенаправление 304 на статические файлы, а также впапка public.

Можно использовать промежуточное программное обеспечение на основе пути, например здесь :

var unless = function (middleware, ...paths) {
    return function (req, res, next) {
        const pathCheck = paths.some(path => path === req.path);
        pathCheck ? next() : middleware(req, res, next);
    };
};//unless

, например

app.use(unless(redirectPage, "/user/login", "/user/register"));

а как подать заявку в моем случае? Давайте рассмотрим, что публичные файлы - это сервер по пути / (т. Е. Папка public) и его подпапки (например, css, js, images или даже такие файлы, как favicon.ico, robots.txt и т. Д. .).

1 Ответ

2 голосов
/ 14 октября 2019

Существует несколько способов использования промежуточного программного обеспечения в экспрессе .

Вместо исключения статических / общедоступных ресурсов из проверки входа в систему на уровне приложения (здесь можно прочитать запрос и пропуститьпроверьте определенные пути), я бы предпочел использовать промежуточное программное обеспечение уровня маршрутизатора для ваших чувствительных путей.

Вы можете определить промежуточное программное обеспечение уровня маршрутизатора прямо в ваших текущих вызовах маршрутизации, например:

router.get('/path_of_the_route', middleware1, middleware2, ..., requestHandler);

Обычно я делаю что-то вроде этого:

serverApp.use(express.static(__dirname + '/public'));

// loginController renders the login pages (and password-reset etc) and provides login/logout functionality
router.use('/', loginController);
router.use('/login', loginController);

// every request to the '/secured' path will be send through the authentication check middleware 
router.use('/secured', loginController.checkLoginMiddleware, securedContentPageController);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...