Чтение файла с ошибкой nodejs

276
18 октября 2017, 08:47

У меня в express.js есть router.get в котором я делаю exec другого скрипта, который пишет в определенное место новый файл. Как аргумент я передаю в другой скрипт var flName = uniqid();, который послужит именем нового файла. И тут же в рамках этого роутер.гет нужно прочитать созданный файл. Для этого я использую такую конструкцию:

function readJson(flName) {
    fs.readFileSync('public/result/' + flName + '.json', 'utf8', function(err, data) {
        if (err) {
            return false;
        } else {
            return data;
        }
    });
}

var rj = readJson(flName);

Суть проблемы: результатом исполнения я получаю не false, а ENOENT: no such file or directory, open 'public/result/%Значение переменной flName%.json'. Как получать false?

В целом идея вызывать var rj = readJson(flName); в цикле с помощью setInterval пока вместо false не придет data. Возможно есть более оптимальный подход?

UPD:

function toObject() {
  return Array.prototype.slice.call(arguments);
}

...

var flName = uniqid();
    var list = toObject(flName, JSON.stringify(req.query));

    var program = exec('phantomjs ./phantom/folder/search.js', list, (error, stdout, stderr) => {
        //действия после записи файла
        var rdj = readJson(flName);
        console.log('RESULT: ');
        console.log(rdj);
    });

Возникает та же проблема, но уже не отображается к ответе сервера, а тормозит сервак и пишется в консоль:

fs.js:653 return binding.open(pathModule._makeLong(path), stringToFlags(flags), mode); ^

Error: ENOENT: no such file or directory, open 'public/result/hphyujnfloj8ujj17b.json'

Answer 1

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

exec('script.js', (error, stdout, stderr) => {
 //действия после записи файла
 readJson(flName);
}
READ ALSO
Реализовать живой поиск [требует правки]

Реализовать живой поиск [требует правки]

помогите реализовать выпадающий список с текстом "выберите город"При нажатии на него - покажет список уже готовых городов и вместо текста...

203
Ошибка: java.lang.NoClassDefFoundError: javax/xml/bind/DatatypeCon

Ошибка: java.lang.NoClassDefFoundError: javax/xml/bind/DatatypeCon

При попытке собрать проект возникает ошибка

377
js получить время

js получить время

Нужно вытащить отсюда время https://yandexcom/time/sync

306