私はExpressを少しいじっていますが、同じサーバーにリンクされている複数のドメインを処理するための「最も正しい」方法は何でしょうか。
私たちが持っていると仮定しましょう
- foo.com
- bar.net
- 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
エントリのを分析し、ドメイン名を解析します。これに基づいて、Express.static()
が適切な静的リソースなどを提供できるようにメソッドを呼び出します。さらに、 index.htmlファイルの内容を読み取って送信するだけです。プレーンHTMLファイルを提供するためにもJadeを使用しようとしましたが、Jadeのディレクティブは相対パスのみを受け入れます。include
ただし、これは確かに機能しますが、それが良い習慣であるかどうかはかなりわかりません。
任意のアドバイス/ヘルプを歓迎します。
アップデート
これをもっと明確にする必要があると思います。私は決して初心者ではありません。ESがどのように機能するかやNGINXのような他のサーバーをよく知っています。NodeJS/Expressの正しい点についての適切な回答を探しています。そのためにNode/Expressを使用しても意味がない場合は、詳しく説明してください。Node / Expressでこれを行うためのより良い方法がある場合は、説明してください。
ありがとう :-)