Сервер ExpressJS -Как работать с несколькими доменами

Я немного дурачусь с Express, и мне интересно, какой «самый правильный» способ - обрабатывать несколько доменов, связанных с одним и тем же сервером.

Предположим, у нас есть

  • foo.com
  • бар.нет
  • 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, пожалуйста, объясните.

Спасибо:-)

21
задан jAndy 14 August 2012 в 23:35
поделиться