Не удается просмотреть новые файлы в общедоступном каталоге метеоров

Когда приложение метеора компилируется (meteor build app), общедоступный каталог becomes \programs\web.browser\app Все файлы, которые находились в общедоступном каталоге разработки \public, теперь доступны с помощью http://domain.tld/file-in-public-directory.jpg

Когда я помещаю новый файл в скомпилированный общедоступный каталог и пытаюсь просмотреть его в браузере, я получаю сообщение об ошибке, в котором говорится, что у Meteor нет маршрута для этого URL-адреса. Когда я делаю это в общедоступном каталоге разработки, он работает безупречно, но не в скомпилированном (meteor build app).

Мне это нужно, потому что я хочу загружать новые файлы в этот каталог.

Любая помощь?


person Simon Knittel    schedule 19.01.2015    source источник


Ответы (2)


Итак, вам придется немного изменить его, но есть способ получить доступ практически к любой папке, особенно к статическим файлам, с помощью низкоуровневого объекта connectHandlers.

Вот пример, когда у вас есть папка с именем .images (скрытая от автоматического обновления Meteor), которая предоставляет изображения всякий раз, когда делается запрос к http://[yoursiteURL]/images/...

var fs = Npm.require('fs');
WebApp.connectHandlers.use(function(req, res, next) {
  var re = /^\/images\/(.*)$/.exec(req.url);
  if (re !== null) {   
    var filePath = process.env.PWD 
    + '/.images/' 
    + re[1];
    var data = fs.readFileSync(filePath, data);
    res.writeHead(200, {
      'Content-Type': 'image'
    });
    res.write(data);
    res.end();
  } else {  
    next();
  }
});

Вы используете регулярное выражение, чтобы узнать, пытается ли входящий запрос получить доступ к /images/. Если это так, мы собираемся отправить изображение с соответствующими заголовками, используя res.write()

Два важных момента:

1- вам не нужно использовать ничего особенного (никаких пакетов и т. д.), чтобы использовать Npm.require('fs'), потому что он встроен и удобен в использовании.

2- использование fs.readFileSync немного взломано и блокирует. Вы захотите настроить это для производительного производственного приложения.

Надеюсь это поможет! Дополнительную информацию о connectHandlers можно найти здесь.

person strack    schedule 19.01.2015

Приятно видеть людей, пробующих метеор. Это отличная вещь, но в то же время она кажется сложной. Что мне действительно очень помогло, так это использование этого приложения: metoer-kitchen. Теперь я использую его вместе, когда работаю над своими проектами.

person Faron    schedule 19.01.2015