Как установить путь к файлу в проекте? - PullRequest
4 голосов
/ 27 апреля 2019

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

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

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.

Ответы [ 3 ]

1 голос
/ 27 апреля 2019

Вы можете использовать модуль 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.log('data', jsonData);
0 голосов
/ 28 апреля 2019

вы можете поместить свои файлы, например, в «приватный» каталог источников вашего приложения, например

. / Private / data / 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)

Приветствия

0 голосов
/ 28 апреля 2019

Добро пожаловать в переполнение стека. Вы не должны обращаться к файловой системе напрямую, как это. Для этого есть несколько причин:

1) Местоположение будет отличаться от компьютера к компьютеру 2) При развертывании в рабочем док-контейнере локальная файловая система доступна только для чтения, если вы специально не подключаете том для таких целей. 3) Когда Метеор собран, его комплект находится где-то в .meteor / local ..., поэтому вы не можете использовать pwd

Имеет больше смысла хранить файлы либо во внешнем хранилище (например, в корзине S3, см. Ostrio: файлы, как это сделать), либо помещать их в базу данных Mongo как объекты.

Если вы все еще настроены на доступ к файлам из файловой системы, вы можете указать местоположение в Meteor.settings, что означает, что вы можете установить его независимо для каждого сервера / компьютера, на котором вы работаете.

...