2016-06-05 4 views
2
var express = require('express'); 
var router = express.Router(); 
router.use(function(req, res, next){ 
    console.log(req.user) 
    if(!req.user){ 
     res.redirect('/login'); 
    }else{ 
     res.locals.username = req.user.username; 
     return next(); 
    } 
}); 

//this won't work 
router.get('/register', function(req, res, next) { 
    res.render('register'); 
}); 

첫 번째 블록은 의미가 있으며 작동합니다. 보호 된 경로로 로그인 시스템을 가질 수 있습니다. 하지만 같은 시간에 두 번째 비트가 망가졌지만 로그인 페이지가 표시됩니다.하지만 localhost : 3000/register로 이동하려고합니다.node.js에서 라우트 스태킹

+0

router.use 전에 router.get을 넣으면 경로로 호출되지 않습니다. –

답변

1

당신이 router.use()을 사용하고있는 모든 다음 roter.get() 경로에 그 기능 미들웨어를 사용하는 라우터를 말하는 것입니다. 여기에서 순서가 의미가 있습니다. 주문에 관심이 있다면 @bloodyKnuckles가하는 일을 할 수 있습니다. 또는 귀하의 경로에 해당 패턴을 유지하려면 다음을 수행 할 수 있습니다.

// Routes that don't need authorization like register 
router.get('home',...); 
router.get('register',...); 

// Use your authorization middleware 
router.use(function(req, res, next){ 
    console.log(req.user) 
    if(!req.user){ 
    res.redirect('/login'); 
    }else { 
    res.locals.username = req.user.username; 
    return next(); 
    } 
}); 

// At this point you're using the authorization middleware. 
// Any routes declared from here will call authorization middleware before its handler. 
router.get('profile', ...); 
0

보호 된 경로를 보호되지 않은 경로와 구분하려면 고속 경로 미들웨어 옵션을 사용하십시오.

// unprotected routes (no auth middleware) 
router.get('/login', function(req, res, next) { 
    res.render('login'); 
}); 

router.get('/register', function(req, res, next) { 
    res.render('register'); 
}); 

// protected route (see auth middleware here) 
router.get('/userinfo', authorize, function(req, res, next) { 
    res.render('userinfo'); 
}); 

function authorize (req, res, next){ 
    console.log(req.user) 
    if(!req.user){ 
     res.redirect('/login'); 
    }else{ 
     res.locals.username = req.user.username; 
     return next(); 
    } 
} 

만 해당 보호 된 경로에 권한 부여 미들웨어를 포함 :

router.get(path, [middleware (optional),] callback) 
+0

기본적으로 내 주문이 잘못 되었습니까? –

+0

당신의 인증을'router.use'에 넣으면 순서가 바뀌게됩니다. 당신이'router.get'에 당신의 인증을 넣으면, 라우트 순서는 더 이상 중요하지 않습니다. – bloodyKnuckles