Если оставить полный путь, то все работает. Но это не сработает, так как должно запускаться на других компьютерах.
Мои попытки написать путь:
const jsonData = JSON.parse(fs.readFileSync('/app/data/faqQuestions', { encoding: 'utf8' }));
Проблемы в консоли:
Error: ENOENT: no such file or directory, open 'C:\app\data\faqQuestions.json'
Если убрать косую черту перед: app/data/faqQuestions.json
:
Error: ENOENT: no such file or directory, open 'C:\Users\mi\AppData\Local\Temp\meteor-test-runqxi9h2.08bd.meteor\local\build\programs\server\app\data\faqQuestions.json'
Нужно прописать правильный путь для работы на любом компе. Мне нужно что-то вроде PWD.
Вы можете использовать модуль path
в узле, чтобы получить правильный путь в файловой системе:
const path = require('path');
const fs = require('fs');
const filepath = path.resolve('/app/data');
const jsonFile = fs.readFileSync(path.join(filepath, 'faqQuestions.json'), { encoding: 'utf8' });
const jsonData = JSON.parse(jsonFile);
console.info('data', jsonData);
Спасибо за ваш вариант, но выдает ошибку Ошибка: ENOENT: нет такого файла или каталога, откройте 'C:\app\data\faqQuestions.json'
Добро пожаловать в Stack Overflow. Вы не должны напрямую обращаться к файловой системе. На это есть несколько причин:
1) Расположение будет варьироваться от компьютера к компьютеру 2) При развертывании в док-контейнере в рабочей среде локальная файловая система доступна только для чтения, если вы специально не монтируете том для таких целей. 3) Когда Meteor собран, пакет, который он запускает, находится где-то в .meteor/local..., поэтому вы не можете использовать pwd
Имеет смысл хранить файлы либо во внешнем хранилище (например, в корзине S3, см. ostrio:files, как это сделать), либо помещать их в базу данных Mongo как объекты.
Если вы по-прежнему настроены на доступ к файлам из файловой системы, вы можете указать местоположение в Meteor.settings, что означает, что вы можете настроить его независимо для каждого сервера/компьютера, на котором вы работаете.
вы можете разместить свои файлы, например. внутри "частного" каталога ваших источников приложений, например
./частный/данные/faq.json
Чтобы получить этот контент, вы можете использовать:
// use for file access
var fs = Npm.require('fs');
// using this meteor lib, gives secure access to folder structure
var files = Npm.require("./mini-files");
// save reference to serverDir
var serverDir = files.pathResolve(__meteor_bootstrap__.serverDir);
// Taken from meteor/tools/bundler.js#L1509
// currently the directory structure has not changed for build
var assetBundlePath = files.pathJoin(serverDir, 'assets', 'app');
// location of the private data folder
var dataPath = files.pathJoin(assetBundlePath, 'data');
после этого должна быть возможность загрузить ваш json на сервер, например
const jsonData = JSON.parse(fs.readFileSync(files.pathJoin(dataPath, 'faqQuestions'), { encoding: 'utf8' }));
Я использовал это в компоненте для метеора для работы с конфигурационными файлами ENV, расположенными на Github (https://github.com/4commerce-technologies-AG/meteor-package-env-settings)
Ваше здоровье
Является ли
/app/data/
относительным путем в вашем проекте Meteor или вне вашего проекта?