2013-05-26 6 views
11

Как я могу прочитать общедоступный каталог в приложении meteor внутри пути my/server.Чтение файлов из каталога внутри приложения meteor

Я попытался использовать собственный пакет 'fs', но я продолжаю получать ошибку файла/каталога.

var fs = Npm.require('fs'); 
var files = fs.readdirSync('/public/soundfiles/'); 

Кто-нибудь использовал пакет файловой системы для чтения статических файлов внутри метеорного приложения?

+2

Вы используете абсолютный путь ''/''. Попробуйте использовать относительный один./Public/soundfiles/''или'' public/soundfiles/'' –

+1

Пробовал все относительные пути - по какой-то причине fs начинает чтение из каталога моих пакетов. Например, если я передаю '.' и i вывод' files', я получаю все файлы в каталоге пакетов? – Warz

ответ

2

Доступ к файлам без части «/ public». В запущенном приложении Meteor каталог public становится вашим корнем, и все, что находится на /public/whatever, доступно по адресу /whatever.

Кроме того, если вы играете вокруг с файлами, вы можете найти их полезными:

2

Это уже не так. Для Meteor 0.8 папка «../client/app» является общедоступной. Таким образом, используйте fs.readdirSync ('../ client/app'), чтобы публиковать файлы и папки.

Источник: личный опыт и https://stackoverflow.com/a/18405793

+2

Использование Meteor 1.0.1. Мне пришлось использовать это: fs.createReadStream («../../../../../ public/data»); Кажется сумасшедшим, я знаю, но это то, что сработало для меня – davedonohue

2

Для метеора 1.0.2 общественность /web.browser/app/ Проверено путем ввода .meteor дир Общий путь в Linux /home/user/your_app_name/.meteor/ local/build/programs/web.browser/app/ И получить root - это `process.env.PWD или process.cwd(). Я не уверен, что его работа развернута.

_meteor_bootstrap_.serverDir +'/assets/app' 

Это путь к частной папке.

+0

1.0 говорит, что 'ReferenceError: _meteor_bootstrap_ не определен.' –

4

Я узнал, что лучше всего загружать файлы в вашу личную папку, если вы не показываете их на улице. В моем случае мне нужно хранить загрузки XML и обрабатывать их. Сначала я написал XML в общую папку, но это вызовет перезагрузку. Затем я переименовал папку для загрузки в /public/.#uploads, которая остановила бы перезагрузку Meteor, но затем снова ... она полностью проигнорировала эту папку во время сборки, и загруженная папка не существовала бы в сборке (выбросить ошибку ENOENT во время чтения).

Так я понял, что лучше всего поместить файлы в/частных/файлов, а затем чтение идет следующим образом:

result = fs.readdirSync('assets/app/files')

Все в личной папке будут перемещены в папку Assets, где во время время выполнения есть доступная папка APP (вы не видите это в структуре папок сборки).

Это помогает просто простому дампу result = fs.readdirSync('.'), чтобы узнать, в какую папку вы входите и посмотрите структуру.

*** UPDATE ***** Локально размещение файлов в private папка все еще срабатывает при восстановлении/обновлении метеора (возможно, не в производстве ..), Так что я нашел другое решение, с помощью UploadServer просто определить директорию загрузки: https://github.com/tomitrescak/meteor-uploads

1

Это работает для меня в Meteor 1.0:

var fs = Npm.require('fs') 
var xsd = fs.readFileSync(process.cwd().split('.meteor')[0] + 'server/company.xsd', 'utf8') 
+0

работает на локальном компьютере, но не работает на сборке, вы использовали это в сборке? – chulian

+0

Из-за отсутствия разработчиков и медленного компиляции на Windows, все проекты Meteor были отменены здесь в прошлом году, поэтому я забыл. –

+0

@chulian Это решение работает обычно для компиляции. Вероятно, это было использовано в пакете. Он не работает в производстве, так как изменяется путь, такая же история, как описано в других ответах. – ghybs

0

для Meteor 1.4, использование серверных Assets. См. Официальные документы об активах http://docs.meteor.com/api/assets.html

+0

Проблема в том, что для файлов с обычным текстовым файлом используются ресурсы, но я хочу прочитать список файлов jsx в папке для создания путей реагирования маршрутизатора – chulian

Смежные вопросы