我可以将express控制器和基本节点js服务器路由到不同的模块中

时间:2011-03-07 08:46:01

标签: node.js express

我有一个要求。使用不同的模块依赖于HOST头,就像使用expressjs的www.myhost.com和使用基本nodejs https.createServer()的* .h.myhost.com一样。它们在同一个港口工作。

https.createServer(options,function(req, res){
   if(req.host === "www.myhost.com"){
       express.handle(req,res) //what I hope
       return 
   }
   //handle by normal way
})

怎么做?

1 个答案:

答案 0 :(得分:5)

您可以使用nodejitsu node-http-proxy。我用它来部署和配置在不同子域下运行的多个应用程序。

示例:

var express = require('express'),
  https = require('https'),
  proxy = require('http-proxy');

// define proxy routes
var options = {
  router: {
    'www.myhost.com': '127.0.0.1:8001',
    '*.h.myhost.com': '127.0.0.1:8002'
  }
};

// express server for www.myhost.com
var express = express.createServer();

// register routes, configure instance here
// express.get('/', function(res, req) { });

// start express server
express.listen(8001);

// vanilla node server for *.h.myhost.com
var vanilla = https.createServer(options,function(req, res){
  // handle your *.h.myhost.com requests
}).listen(8002);

// start proxy
var proxyServer = httpProxy.createServer(options);
proxyServer.listen(80);

我不确定在http-proxy路由表(* .h.myhost.com)中使用通配符,但由于这些值在node-http-proxy中转换为正则表达式,我认为它们有效。 / p>