Как указать путь к файлу в проекте?

Если оставить полный путь, то все работает. Но это не сработает, так как должно запускаться на других компьютерах.

Мои попытки написать путь:

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.

Является ли /app/data/ относительным путем в вашем проекте Meteor или вне вашего проекта?

Jankapunkt 27.04.2019 14:50
Как сделать HTTP-запрос в Javascript?
Как сделать HTTP-запрос в Javascript?
В JavaScript вы можете сделать HTTP-запрос, используя объект XMLHttpRequest или более новый API fetch. Вот пример для обоих методов:
4
1
162
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Ответ принят как подходящий

Вы можете использовать модуль 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'

katuwa 29.04.2019 07:44

Добро пожаловать в 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)

Ваше здоровье

Другие вопросы по теме