У меня в 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'
Если вы используете для запуска другого процесса exec, то можете передавать в вызов аргументом функцию, которая будет вызываться, когда процесс завершится. Дополнительно потребуется обеспечить условие, по которому при завершении другого процесса файл должен быть уже записан. Тогда все действия по чтению файла вам потребуется выполнять в этой функции. Выглядить это может примерно так:
exec('script.js', (error, stdout, stderr) => {
//действия после записи файла
readJson(flName);
}
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
помогите реализовать выпадающий список с текстом "выберите город"При нажатии на него - покажет список уже готовых городов и вместо текста...
При попытке собрать проект возникает ошибка