Я немного обманываюсь с помощью Express, и мне интересно, какой "самый правильный" способ - обрабатывать несколько доменов, которые связаны с одним и тем же сервером.
Предположим, что
- foo.com
- bar.net
- baz.com
которые все указывают на 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, пожалуйста, объясните.
Спасибо: -)