Как передать промежуточное ПО указанным маршрутам в express node.js - PullRequest
0 голосов
/ 23 сентября 2018

У меня есть промежуточное ПО (gateMan), которое проверяет, вошел ли пользователь в систему, я не хочу, чтобы промежуточное ПО (gateMan) срабатывало на всех маршрутах.Тем не менее, он будет запущен на 98% моих маршрутов, как я могу добиться этого без вызова промежуточного программного обеспечения на каждом из маршрутов.

Промежуточное программное обеспечение

const gateMan = (req,res,next)=>{
    if(req.user)
        next();
    else{
        res.redirect('/auth/login');
        res.end();
    }
};

Пример маршрута

app.use('/',staticRoute);
app.use('/auth',authRoute);
app.use('/user',gateMan,userRoute);
app.use('/mocks',gateMan,mockRoute);
app.use('/sample2',sample2Route);
app.use('/sample3',sample3Route);
app.use('/sample4',sample4Route);

Я хочу применить gateMan ко всем маршрутам, кроме staticRoute и authRoute .Я думаю, если есть способ, которым я могу просто передать все маршруты и массивы и применить к ним промежуточное программное обеспечение, насколько это возможно?

Ответы [ 2 ]

0 голосов
/ 23 сентября 2018

Вы можете использовать app.all('*') и проверить, что используется path.Оттуда вы можете использовать логику, что сейчас в middleware.Это довольно динамичное решение, и вам не нужно указывать, какие маршруты есть.

Примерно так (не проверено):

app.all('*', function(req, res, next) {
    if (req.path !== '/' || req.path !== '/auth') {
        if(req.user)
            next()
        else {
            res.redirect('/auth/login')
            res.end()
        }
    }
})

Затем вы можете указать все неавторизованные пути.в array и отметьте app.all, если path в этом array.

Что-то вроде:

var unauthorizedPaths = [ '/', '/auth']

app.all('*', function(req, res, next) {
    if(unauthorizedPaths.indexOf(req.path) === -1) {
        if(req.user)
            next()
        else {
            res.redirect('/auth/login')
            res.end()
        }
    }
})

https://expressjs.com/en/4x/api.html#req.path

https://expressjs.com/en/4x/api.html#app.all

0 голосов
/ 23 сентября 2018

Вы можете использовать экспресс-app.use в файле приложения.Поскольку app.use зависит от порядка, вы можете сначала определить свои staticRoute и authRoute, затем ваше промежуточное ПО, а затем другие маршруты.

app.use('/',staticRoute);
app.use('/auth',authRoute);
app.use(gateMan)
app.use('/user',userRoute);
app.use('/mocks',mockRoute);
app.use('/sample2',sample2Route);
app.use('/sample3',sample3Route);
app.use('/sample4',sample4Route);

Каждый маршрут, который вы определили после своего gateman промежуточного ПО, будет использовать это промежуточное ПО.

...