我面临以下情况。为了进一步模块化我的软件开发,我已经单独编写了一些标准模块。想想基于Express和Passport的登录模块,允许用户使用各种社交服务登录。该模块还包含用于用户管理,登录,注册,配置文件等的UI。
现在,我尝试做的事情就是将Auth app文件夹(包含快速应用程序,其所有路径,视图,模型,设置和依赖)放到另一个Express应用程序中(例如,一个CMS),然后用require('./lib/auth/app.js')
之类的东西加载它。我知道这是可能的,请看Kue。
我该怎么做呢?我如何管理命名空间问题?我可以将/auth/
添加到每条路线,但我可以想象设置(app.use()
' s)和公共文件夹会与“父母”相冲突。 app.js'设置和公用文件夹。
提前致谢,
Fabian
答案 0 :(得分:6)
想想我找到了答案。所以,我找到了this question和this one。猜猜我的术语没了。
我通过做一些事情解决了我的问题。首先,我改变了所有路线,并将网址改为“命名空间”(不是真的,但是这样做了)。所有路线现在都在/auth/
之前。我对所有链接做了同样的事情,所以这一切都正常。
接下来,我从app.js中删除了服务器部分。所以,而不是做:
require('http').createServer(app).listen(app.get('port'));
我只是这样做:
module.exports = app;
我向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
应用使用了一些会话内容。根据第二个link,如果我理解正确,我的app.use(session...)
应用中的auth
内容会被app.use
覆盖。另外,我想定义一个EJS帮助器来生成我的URL(类似于site_url('/facebook/callback')
,然后指向/auth/facebook/callback
)。最后,我需要包含我的root应用程序中的设置。我正在考虑将我的整个app.js
(在auth
中)包装在一个函数中,我传递一个配置对象。像这样:
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;
}
我希望这会有所帮助,如果您需要更多信息,我会看到是否可以将一些代码发布到一个要点。请告诉我!