Node.js Express:需要/使用另一个应用程序

我正面临以下情况。 为了进一步模块化我的软件开发,我编写了几个标准模块。 考虑基于Express和Passport的login模块,允许用户使用各种社交服务login。 该模块还包含用户pipe理,login,注册,configuration文件等用户界面。

现在,我想要做的就是将Auth应用程序文件夹(包含快速应用程序,所有的路线,视图,模型,设置和依赖)放到另一个Express应用程序(例如CMS)中,然后加载它有像require('./lib/auth/app.js') 。 我知道这是可能的,看看Kue 。

我怎么去做这个? 我如何pipe理命名空间问题? 我可以cours append /auth/到每个路由,但我可以想象设置( app.use()的)和公共文件夹将与'父'app.js'设置和公用文件夹冲突。

提前致谢,

法比安

想我find了我的答案。 所以,我发现了这个问题 ,而这个 问题 。 猜猜我的术语是closures的。

我通过做一些事情来解决我的问题。 首先,我改变了所有的路线和url是“命名空间”(不是真的,但这是工作)。 现在所有的路线都在/auth/前面。 我对所有的链接都做了同样的事情,所以这一切都工作。

接下来,我从app.js中删除了服务器部分。 所以,而不是做:

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

我只是做:

module.exports = app;

我添加一些自定义方法的应用程序对象:

 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应用程序使用一些会话的东西。 根据第二个链接 ,如果我理解正确,我的auth应用程序中的app.use(session...)东西被app.use覆盖。 另外,我想定义一个EJS助手来生成我的url(类似于site_url('/facebook/callback') ,然后指向/auth/facebook/callback )。 最后,我需要包含来自我的根应用程序的设置。 我想包装我的整个app.jsauth )在一个函数,我传递一个configuration对象。 喜欢这个:

 module.exports = function(config) { var app = express(); app.set('config', config); // various app settings, routes, etc // return app so it's available in my root. return app; } 

我希望这有助于,如果你需要更多的信息,我会看到,如果我可以张贴一些代码的要点。 只是让我知道!