我在 Express 上玩弄了一下,我想知道,“最正确”的方法是处理链接到同一服务器的多个域。
假设我们有
- foo.com
- 酒吧网
- baz.com
都指向111.222.333.444
. 那台机器正在运行带有 Express 的 NodeJS。我目前的解决方案如下所示:
var express = require( 'express' ),
app = module.exports = express.createServer(),
// ... more lines ...
app.get( '/', routes.index.bind( app ) );
到目前为止,这非常简单。到目前为止,唯一的例外是在我的app.configure
通话中,我没有拨打.use( express.static() )
. 那是因为该.routes.index()
方法现在看起来像这样:
var fs = require( 'fs' ),
// ... more lines ...
exports.index = function( req, res ) {
var host = /(\w+\.)?(.*)\.\w+/.exec( req.header( 'host' ) ),
app = this;
switch( host[ 2 ] ) {
case 'foo':
app.use( express.static( '/var/www/foo' ) );
fs.readFile( '/var/www/foo/index.html', 'utf8', fileReadFoo );
break;
case 'bar':
app.use( express.static( '/var/www/bar' ) );
fs.readFile( '/var/www/bar/index.html', 'utf8', fileReadBar );
break;
case 'baz':
// ... lines ...
res.render( 'index', { title: 'Baz Title example' } );
break;
default:
res.send('Sorry, I do not know how to handle that domain.');
}
function fileReadFoo( err, text ) {
res.send( text );
}
function fileReadBar( err, text ) {
res.send( text );
}
};
这里发生的是,我分析req.header
条目host
并解析域名。基于此,我调用该.static()
方法,以便Express可以提供正确的静态资源等,此外,我只是简单地读取并发送index.html文件的内容。我也尝试使用Jade来提供纯HTML 文件,但Jadeinclude
中的指令只接受相对路径。
但是,这确实有效,但我不确定这是否是一个好习惯。
欢迎任何建议/帮助。
更新
我想我需要更清楚地说明这一点。无论如何,我都不是初学者。我非常了解 ES 和 NGINX 等其他服务器的工作原理。我正在寻找关于 NodeJS/Express 的正确之处的合格答案。如果为此使用 Node/Express 没有任何意义,请详细说明。如果使用 Node/Express 有更好的方法,请解释一下。
谢谢 :-)