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.js
( auth
)在一个函数,我传递一个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; }
我希望这有助于,如果你需要更多的信息,我会看到,如果我可以张贴一些代码的要点。 只是让我知道!