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

时间:2011-12-15 01:40:40

标签: node.js

我有几个应用程序正在尝试合并到一个“套件”中:2个应用程序是独立的,一个只是一个auth层(使用每个用于FB Connect的应用程序)。我想这样设置:

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

我考虑过将app1和app2保持独立,顶层是代理,但我认为在它们之间共享一个auth系统会很困难。 虚拟主机(通过连接)可能会起作用,但我不一定要为每个子域创建DNS的子域。 因此,我希望将主应用程序作为auth层,并将其他应用程序“挂载”到该应用程序中,并在每个应用程序上将 basepath 设置为子路径。 (basepath在express Guide中提到,但未记录良好。)

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

在另一个帖子中,"How to share sessions in mounted express apps",斯蒂芬写道,

  

我有一个相当复杂的基于快速的Web应用程序,它被分成几个子应用程序,也是快速应用程序(使用app.use())......

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

像这样安装应用程序使得表达非常灵活,但目前尚不清楚如何做到这一点......任何建议都会非常受欢迎! (如果有人在努力解决这个问题,我很乐意与我的每一个实施分享经验教训。)

2 个答案:

答案 0 :(得分:40)

app.use(uri, instanceOfExpressServer)

请确保不要在其上调用.listen

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

答案 1 :(得分:7)

不确定这是否对您有所帮助,但我希望为我的API路线添加前缀。我做的是当我初始化路由器时,我添加了挂载路径。所以我的配置看起来像这样

//Default configuration
app.configure(function(){
    app.use(express.compress());
    app.use(express.logger('dev'));
    app.set('json spaces',0);
    app.use(express.limit('2mb'));
    app.use(express.bodyParser());
    app.use('/api', app.router);
    app.use(function(err, req, res, callback){
        res.json(err.code, {});
    });
});

调用路由器时注意'/ api'