Я немного дурачусь с Express, и мне интересно, какой «самый правильный» способ - обрабатывать несколько доменов, связанных с одним и тем же сервером.
Предположим, у нас есть
которые все указывают на 111.222.333.444
. На этой машине работает NodeJS с Express. Мое текущее решение выглядит так:
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-файлов , но директива include
в Jade принимает только относительные пути.
Тем не менее, это действительно работает, но я не уверен, что это хорошая практика.
Любые советы/помощь приветствуются.
Обновление
Я думаю, мне нужно сделать это более ясным. Я ни в коем случае не новичок. Я очень хорошо знаю, как работает ES и другие серверы, такие как NGINX. Я ищу квалифицированные ответы о том, что правильно с NodeJS/Express. Если для этого нет смысла использовать Node/Express, пожалуйста, уточните. Если есть лучший способ сделать это с помощью Node/Express, пожалуйста, объясните.
Спасибо:-)