我有几个应用程序正在尝试合并到一个“套件”中:2个应用程序是独立的,一个只是一个auth层(使用每个用于FB Connect的应用程序)。我想这样设置:
我考虑过将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
(因此不是作为子应用程序)...但这似乎加载了所有子应用程序的路径直接进入父应用程序。我尝试在子应用程序本身和父应用程序中使用basepath
,app.set('basepath', '/subapp/')
等设置app.basepath = '/subapp/'
,但似乎没有任何效果。< / p>
像这样安装应用程序使得表达非常灵活,但目前尚不清楚如何做到这一点......任何建议都会非常受欢迎! (如果有人在努力解决这个问题,我很乐意与我的每一个实施分享经验教训。)
答案 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'