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

the*_*t0p 32 node.js

我有几个应用程序,我正在尝试合并到一个"套件":2个应用程序是独立的,一个只是一个auth层(使用Everyauth为FB Connect).我想这样设置:

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

我已经考虑过让app1和app2独立,顶层是代理,但我认为在它们之间共享一个auth系统会很困难.虚拟主机(通过连接)可能会起作用,但我不一定要为每个子域创建DNS的子域.所以代替我想主应用程序是在auth层,并且其他"安装"到一个与基本路径上的每个应用程序,以一个子路径设置.(basepath在明确的指南中提到,但没有很好地记录.)

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

在另一个帖子中,"如何在已安装的快递应用程序中共享会话",Stephen写道,

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

那么如何使用app.use()安装子应用程序?我只是试图使用var subApp = require('./subapp/app.js'),listen()只在子应用程序中运行时! module.parent(因此不是作为子应用程序).​​..但这似乎将所有子应用程序的路径直接加载到父应用程序中.我试过设置basepath使用app.set('basepath', '/subapp/'),app.basepath = '/subapp/'等等,无论是在子应用程序本身以及从父应用程序,但它似乎并没有产生任何影响.

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

Ray*_*nos 40

app.use(uri, instanceOfExpressServer)

只要确保你不要打电话.listen.

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


Xer*_*rri 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, {});
    });
});
Run Code Online (Sandbox Code Playgroud)

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