我们的基本域名为http://api.mysite.com
。这应该是我们所有API的前门。假设我们使用以下url结构访问了两个不同的API:
http://api.mysite.com/launchrockets
http://api.mysite.com/planttrees
这些完全不同。关于在Heroku上运行它,我们似乎有两种选择。
1)将所有内容放在Heroku上的一个应用程序中。这感觉错了(非常错误)并且可能导致更改一个API的机会更多,无意中打破了另一个。
2)有3种不同的Heroku应用程序。第一个作为代理(http://mysite-api-proxy.herokuapp.com
),将使用bouncy或http-proxy等模块查看传入请求并重定向到http://planttrees.herokuapp.com
或http://launchrockets.herokuapp.com
。 / p>
我倾向于选项2,但我担心管理代理应用程序的负载。对于具有同步体系结构的Web框架,这种方法将是灾难性的。然而,如果node.js使用cluster module并且是异步的,我认为这可能会扩展正常。
我之前遇到过类似的问题,但大部分与同步框架相关,其中选项2肯定是一个糟糕的选择。此问题特定于节点及其执行方式。
关于建立这个的最佳方法的想法?
答案 0 :(得分:4)
我实现了简单的演示项目来实现多应用程序结构。
https://github.com/hitokun-s/node-express-multiapp-demo
通过这种结构,您可以轻松地单独设置和维护每个应用程序 我希望这对你有所帮助。
答案 1 :(得分:3)
这是我写的一篇试图回答这个问题的博客文章。有很多选择,但您已经决定什么适合您的应用和架构。
http://www.tehnrd.com/host-multiple-node-js-apps-on-the-same-subdomain-with-heroku/
答案 2 :(得分:1)
与@TehNrd类似,我正在使用代理。但是这种方法不需要多个heroku应用程序,只需要一个:
在您的网络应用上:
var express = require('express')
, url = require('url')
, api_app = require('../api/server') //this is your other apps index.js or server.js
, app = express()
, httpProxy = require('http-proxy')
, apiport = parseInt(process.env.PORT)+100 || 5100 //this works!
;
// passes all api requests through the proxy
app.all('/api*', function (req, res, next) {
api_proxy.web(req, res, {
target: 'http://localhost:' + apiport
});
});
在您的API服务器上:
var express = require('express');
var app = express();
var port = parseInt(process.env.PORT)+100 || 5100;
...
...
app.listen(port);