一尘不染

如何挂载express.js子应用程序?

node.js

我有几个应用程序试图合并为一个“套件”:2个应用程序是独立的,一个只是一个身份验证层(使用FB Connect的Everyauth)。我想这样设置:

  • /-(首页)应用列表
  • / auth-登录任何应用程序
  • / app1-需要通过/ auth登录才能访问
  • / app2-(相同)

我曾考虑过让app1和app2保持独立,顶层是代理,但是我认为要在它们之间共享身份验证系统很困难。虚拟主机(通过Connect)也许可以工作,但我不一定要为每个主机都使用DNS子域。因此,相反,我希望主应用程序成为auth层,而其他应用程序“挂载”到该层中,每个应用程序上的
basepath
设置为子路径。(在快速指南中提到了基本路径,但没有很好地记录下来。)

他们都使用MongoDB,身份验证层使用connect-mongodb进行会话,因此我希望它们能够在它们之间共享整个身份验证/会话层。

在另一个主题“如何在已安装的Express应用程序中共享会话”中,Stephen写道,

我有一个相当复杂的基于Express的Web应用程序,该应用程序分为几个子应用程序,这些子应用程序也属于Express应用程序(使用app.use())…

那么,如何使用它app.use()来安装子应用程序呢?我只是尝试使用var subApp = require('./subapp/app.js')listen()仅当在子应用程序中运行时! module.parent(而不是作为子应用程序).​​..但这似乎将所有子应用程序的路径直接加载到父应用程序中。我尝试在子应用程序本身和父应用程序中都basepath使用app.set('basepath', '/subapp/')app.basepath = '/subapp/'等设置,但这似乎没有任何效果。

像这样挂载的应用程序使express变得异常灵活,但目前尚不清楚该怎么做…任何建议都将非常受欢迎!(如果有人为此感到苦恼,我很乐意分享我的Everyauth实现的经验教训。)


阅读 397

收藏
2020-07-07

共1个答案

一尘不染

app.use(uri, instanceOfExpressServer)

只要确保您不要求.listen它。

另一种方法是require("cluster")在单个主服务器中使用和调用所有应用程序,以便它们共享同一端口。然后只需路由即可“正常工作”

2020-07-07