Установить express .stati c каталог динамически - PullRequest
1 голос
/ 02 февраля 2020

Я хочу установить root каталог exress.stati c таким образом, чтобы запрос от поддоменов имел отдельную папку root.

У меня есть сайт с несколькими поддоменами, и структура выглядит следующим образом:

index.js
public/
-- site1
-- site2
-- site3

я хочу установить public/site1 в качестве папки stati c, когда запрос поступает из site1.mydomain.com и site2.mydomain.com не может получать файлы из каталога public/site1.

Я пробовал это:

app.use ((req, res, next) => {
  let hostName = req.headers.host;
  let options = domainMap[hostName];

  req.app.use (
    express.static (path.join (__dirname, 'public', options.publicDir))
  );

  next ();
});

domainMap содержит следующий объект:

{
    site1:{
         publicDir:'site1',
    },
    site2:{
         publicDir:'site2',
    },
    site3:{
         publicDir:'site3',
    }
}

, что он делает сейчас, это устанавливает каталог publi c только для первый запрос, но есть ли способ изменить меня динамически для каждого запроса?

1 Ответ

1 голос
/ 02 февраля 2020

Вы можете динамически генерировать нужную функцию промежуточного программного обеспечения, а затем вызывать ее вручную. Вы не хотите регистрировать его на app.use(), потому что тогда он будет активен для всех запросов. Вот почему вам нужно вызвать его вручную. Кроме того, express.static() создает промежуточное программное обеспечение, которое уже вызывает next(), поэтому вам не нужно этого делать, кроме случаев, когда вы не вызываете сгенерированное промежуточное программное обеспечение.

app.use ((req, res, next) => {
  let hostName = req.headers.host;
  let options = domainMap[hostName];
  // protect against missing or unexpected hostName
  if (options && options.publicDir) {
      let middleware = express.static(path.join (__dirname, 'public', options.publicDir));
      middleware(req, res, next);
  } else {
      // nothing to do here, keep routing
      next();
  }
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...