Задать вопрос
dimon_durak
@dimon_durak
Дурак это не фамилия, дурак - это профессия

Можно ли реализовать такой сценарий?

Сейчас использую IAS для размещения простеньких сайтов-лендингов в количестве десяти штук, которые отличаются только доменными именами и шестью переменными (номер счётчика, строка валидации Яндекса, а также параметры гугло-формы). Переменные вынесены в файл server/request.js, из которого в шаблоны подставляются значения.

Таким образом, есть десять подкаталогов в applications и всё это уже работает, вот только делать изменения на всех этих сайтах слегка неудобно.

Можно ли использовать только одно приложение, забиндить на него все десять доменных имён, а переменные подставлять в шаблон в зависимости от запрошенного доменного имени?
  • Вопрос задан
  • 200 просмотров
Подписаться 1 Оценить Комментировать
Решения вопроса 1
MarcusAurelius
@MarcusAurelius Куратор тега Node.js
автор Impress Application Server для Node.js
Ничего сложного в этом нет, вот только рекомендую переместить переменные, или скорее это константы в /init/constants.js, а то ведь на /server/requests.js они каждый раз создаются и теряются. Например так:
application.constants = {
  'domain1.com': { field1: "value1", ... }
  'domain2.net': { field1: "value1", ... },
    ...
};

А в /server/requests.js их можно будет просто возвращать в зависимости от домена сайта:
module.exports = function(client, callback) {
  client.cache('10m');  // кешируем на 10 минут
  // отдаем нужный набр переменных для сайта
  callback(application.constants[client.host]);
};

Ну и в /config/hosts.js настраиваем все на одно приложение:
module.exports = [ '*' ];
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
dimon_durak
@dimon_durak Автор вопроса
Дурак это не фамилия, дурак - это профессия
Спасибо, получилось.

Правда, получилось частично.

Во-первых, с включённым кешированием второй запрос ломает всё с таким вот выводом:

2015-07-10T11:43:36.864Z
Master(5932/C1N0)
TypeError: undefined is not a function
  Client.sendCache (impress.client.js:602:62)
  Client.processing (impress.client.js:375:62)
  impress.client.js:261:16
  Client.detectRealPath (impress.client.js:712:91)
  impress.client.js:260:14
  Client.restoreSession (impress.client.js:339:17)
  Client.dispatch (impress.client.js:259:12)
  impress.application.js:487:21
  Client.static (impress.client.js:821:28)
  EventEmitter.application.dispatch (impress.application.js:460:18)
  Server.impress.dispatcher (impress.js:691:26)
  Server.emit (events.js:110:17)
  HTTPParser.parserOnIncoming [as onIncoming] (_http_server.js:491:12)
  HTTPParser.parserOnHeadersComplete (_http_common.js:111:23)
  Socket.socketOnData (_http_server.js:343:22)
  Socket.emit (events.js:107:17)
  readableAddChunk (_stream_readable.js:163:16)
  Socket.Readable.push (_stream_readable.js:126:10)
  TCP.onread (net.js:538:20)
Impress shutting down


Без кеширования работает так, как надо, вот только ума не приложу, как быть с запросами на www.domain.ru. Конечно, можно продублировать объект 'domain.ru' объектом 'www.domain.ru' в init/constants.js (и это работает), но что-то мне подсказывает, что это не совсем красивое решение.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы