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

 2021-04-09 

Node.js Express: require/use one app within another

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

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

我将如何去做?以及我该如何处理命名空间问题?我可以将/auth/附加到每个路由,但是我可以想象设置(app.use()的)和公用文件夹将与"父" app.js的设置和公用文件夹冲突。

预先感谢,

法比安


认为我找到了答案。因此,我找到了这个问题,也发现了这个问题。猜猜我的术语不对。

我通过做几件事解决了我的问题。首先,我将所有路由和url更改为" namespaced "(不是,但这确实可以做到)。现在,所有路由都在其前面带有/auth/。我对所有链接进行了相同的操作,因此一切正常。

接下来,我从我的app.js中删除了服务器部分。因此,代替做:


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

我只是做:


module.exports = app;

然后向应用程序对象添加一些自定义方法:

1
2
app.isLoggedIn = auth.isLoggedIn;
app.notLoggedIn = auth.notLoggedIn;

然后,在我的根应用程序中,我只需执行以下操作即可将auth应用程序加载到其中。很酷。

1
2
3
4
5
6
7
8
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中)package在一个函数中,并将配置对象传递给该函数。像这样:

1
2
3
4
5
6
7
8
9
10
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;

}

我希望这会有所帮助,如果您需要更多信息,我会看看是否可以将一些代码发布到要点上。请让我知道!