@Mnwamnowich

Как использовать переменную в app.use(express.static(*))?

Здравствуйте. Я пытаюсь сделать директорию статической, но путь к этой директории указывается в файле config.json, проблема в том, что когда я использую путь к директории напрямую, то все работает:
app.use(express.static("template/main"));

Но если я запишу путь к этой директории в переменную, то я получаю ошибку "root path required
", вот сам код:

fs.readFile('config.json', function (err, data) {
  if (err) throw err;
    config = JSON.parse(data);
    template = path.join("template", config.TemplateName);
    console.log(template);
});

app.use(express.static(template));


Почитал на форумах, что нужно app.use(express.static(template)); заменить на app.use(express.static(__dirname+"/"+template));

Ошибки теперь нет, но и результата нет, директория не подключается
  • Вопрос задан
  • 926 просмотров
Решения вопроса 1
Sivkoff
@Sivkoff
Web Developer
Думаю тут вся проблема в асинхронной инициализации. Т.е. по идее в этом месте лучше использовать fs.readFileSync.
Во вторых, json можно импортировать как обычный модуль, без использования fs:
var config = require('./config.json'),
    template = path.join(__dirname, "template", config.TemplateName);

console.log(template);
app.use(express.static(template));
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
AMar4enko
@AMar4enko
Ну асинхронно же файл читается, это же азы.
Ответьте себе на вопрос, что выполнится первым - вызов app.use или callback в readFile?
Замените readFile на readFileSync. Только помните, что блокирующие вызовы нигде, кроме как на этапе конфигурирования, вызывать не стоит.
Ответ написан
Комментировать
Dimd13
@Dimd13
express.static уже давно deprecated
var statics = require('serve-static');
...
app.use(statics(path.join(__dirname, 'public')));
Ответ написан
Ваш ответ на вопрос

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

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