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

Fab*_*rol 7 require node.js express

我面临以下情况.为了进一步模块化我的软件开发,我独自编写了一些标准模块.想想基于Express和Passport的登录模块,允许用户使用各种社交服务登录.该模块还包含用于用户管理,登录,注册,配置文件等的UI.

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

我该怎么做呢?我如何管理命名空间问题?我可以将cours追加/auth/到每条路线,但我可以想象设置(app.use()'s)和公共文件夹会与'parent'app.js'设置和公共文件夹冲突.

提前致谢,

法比安

Fab*_*rol 6

我想我找到了答案.所以,我发现了这个问题,并且这一个.猜猜我的术语没了.

做了几件事我解决了我的问题.首先,我改变了所有路线,并将网址改为"命名空间"(不是真的,但是这样做了).所有路线现在都/auth/在他们面前.我对所有链接做了同样的事情,所以这一切都正常.

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

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

我只是做:

module.exports = app;

我向app对象添加了一些自定义方法:

app.isLoggedIn = auth.isLoggedIn;
app.notLoggedIn = auth.notLoggedIn;
Run Code Online (Sandbox Code Playgroud)

然后,在我的根应用程序中,我只是执行以下操作来加载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...
});
Run Code Online (Sandbox Code Playgroud)

还有事情要做:

我的auth应用使用了一些会话内容.根据第二个链接,如果我理解正确,app.use(session...)我的auth应用程序中的东西会被覆盖app.use.另外,我想定义一个EJS助手来生成我的url(类似于site_url('/facebook/callback')然后指向的东西/auth/facebook/callback).最后,我需要包含我的root应用程序中的设置.我正在考虑将我的整个app.js(in 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;

}
Run Code Online (Sandbox Code Playgroud)

我希望这有帮助,如果您需要更多信息,我会看到我是否可以将一些代码发布到一个要点.请告诉我!