2013-12-18 3 views
2

나는 node.js의 도움을 받아 구축 된 간단한 앱을 가지고 있습니다. 이 응용 프로그램에는 여러 경로와 기본 로그인/로그 아웃 기법이 있습니다. 사용자가 로그인하지 않은 경우 모든 경로가 로그인 양식으로 리디렉션되기를 원합니다.이 작업은 각 경로 파일에 인증 체커 라인을 삽입하여 수행 할 수 있습니다.익스프레스 체인 연결

질문 : 는 로그인 검사기 경로를 통해 모든 요청을 누르고 다음 경로의 파일을 기존에 아무것도 작성하지 않고 요청 하나를 통과하는 노선 체인 수 있습니까?

예. 기존 경로는 "/", "/ upload", "/ login", "/ logout"입니다. 에 대한 요청을 또는 게시물 "/ upload"로 처리하려면 "/ login"경로로 처리 한 다음 "upload"경로로 처리해야합니다.

답변

2

예, 경로에서 핸들러를 연결할 수 있습니다.

app.get('/server', ensureAuthenticated, housekeeping, routes.server.get) 

여기 ensureAuthenticatedhousekeepingnext() 전화 응답을 보내 해달라고 : 당신은 당신이 원하는 순서대로 여러 핸들러를 넣을 수 있습니다

routehandler(req, res, next){ 
    //send response directly 
    //or call next to call the next handler 
} 

처럼 핸들러 정의가 있어야합니다. 마지막 페이지는 결과 페이지를 반환합니다.

로그인 할 때 사용하는 핸들러와 다른 핸들러가 필요합니다. 로그인 페이지는 인증을 수행하고, 나머지 페이지는 사용자가 인증되었는지 여부 만 확인해야합니다. 차이점은 세션을 사용하는 경우 명확합니다.


경로 처리기의 args는 middlewares의 args와 동일합니다. 사람들은 다음과 같습니다

  1. (ERR, REQ, 고해상도, 다음) 오류 핸들러
  2. (REQ, 고해상도, 다음) 비 오류 처리기

위의 사소한 변화가 next 될 수 있다는 것입니다 콜백 체인 (callback chain)에서 원하는 최종 기능인 경우 제외됩니다. 당신은 이것들과 다른 args를 가질 수 없습니다. here (줄 154)이라는 이름을 볼 수 있습니다.

경로는 메소드, 경로 일치 및 콜백 배열로 구성됩니다. 미들웨어와 마찬가지로 콜백 체인은 응답이 반환되거나 오류가 발생할 때까지 특정 경로에 대해 순차적으로 실행됩니다.

+0

감사합니다. routehandler가 args (req, res, next 등)를 얻는 곳을 설명해 주시겠습니까? 나는 코드의 어떤 부분에서 그것들을 전달하지 않는다. 'routehandler (next, req, err, res)'라고 부를 수 있을까요? – Schtz

+0

@Schtz가 답변을 업데이트했습니다. – user568109

+0

고마워요. 아직도 배울 필요가 있습니다. – Schtz