2012-09-05 2 views
7

다음 상황에 직면하고 있습니다. 소프트웨어 개발을 더 모듈화하기 위해 필자는 몇 가지 표준 모듈을 독자적으로 작성했습니다. Express와 Passport를 기반으로 한 로그인 모듈을 생각해보십시오. 사용자는 모든 종류의 소셜 서비스에 로그인 할 수 있습니다. 이 모듈에는 사용자 관리, 로그인, 등록, 프로필 등을위한 UI도 포함되어 있습니다.Node.js Express : 다른 앱에서 하나의 앱 필요/사용

지금 내가하려는 것은 Auth 앱 폴더를 없애는 것입니다 (명시 적 앱, 모든 경로,보기 포함). , 모델, 설정 및 종속성)를 다른 Express 응용 프로그램 (예 : CMS)에 저장 한 다음 require('./lib/auth/app.js')과 같은 값으로로드하십시오. 가능하다면, Kue을보십시오.

어떻게해야합니까? 네임 스페이스 문제를 어떻게 관리합니까? 각 경로에 /auth/을 추가 할 수는 있지만 설정 (app.use() 's)과 공용 폴더가'상위 'app.js'설정 및 공용 폴더와 충돌한다고 생각할 수 있습니다. 사전에

감사합니다,

파비안

답변

6

내가 내 대답을 찾은 것 같아요. 그래서 this questionthis one을 발견했습니다. 내 용어가 틀렸어.

나는 몇 가지 일을하여 내 문제를 해결했습니다. 우선, 모든 경로와 URL을 "네임 스페이스"로 변경했습니다 (실제로는 아니지만이 작업을 수행함). 모든 경로의 앞에는 /auth/이 있습니다. 나는 모든 링크에 똑같이 했으므로 모든 것이 작동합니다.

다음으로 내 app.js에서 서버 부분을 제거했습니다. 그래서, 일을 대신에 :

module.exports = app;

그리고 응용 프로그램 개체에 대한 일부 사용자 지정 방법을 추가 :

require('http').createServer(app).listen(app.get('port'));

난 그냥 할에

app.isLoggedIn = auth.isLoggedIn; 
app.notLoggedIn = auth.notLoggedIn; 

다음 내 루트 애플 리케이션, 난 그냥 auth 애플 리케이션을로드하려면 다음을 수행합니다. 라우팅, 공개 파일 및 기타 모든 물건은 마술처럼 일어납니다. 정말 멋진. 여전히

var auth = require('./vendor/auth/app'); 
var app = express(); 

app.configure(function() { 
    app.use(auth); // use our auth app 

    // do a lot of root-app related stuff... 
}); 

것이다 것 :

auth 응용 프로그램은 몇 가지 세션 물건을 사용합니다. 두 번째 link에 따르면 올바르게 이해하면 auth 앱의 app.use(session...) 콘텐츠가 app.use에 의해 무시됩니다. 또한 내 URL을 생성하는 EJS 도우미를 정의하려고합니다 (site_url('/facebook/callback')과 같음). 그러면 /auth/facebook/callback을 가리 킵니다. 마지막으로, 내 루트 앱의 설정을 포함해야합니다. 나는 app.js (auth에) 내 전체를 설정 객체에 전달하는 함수에 넣을 생각이다. 이와 같이 :

내가 도움이되기를 바랍니다. 약간의 정보가 더 필요하면 요지에 약간의 코드를 게시 할 수 있습니다. 바로 알려주세요!