NodeJS fetch возвращает ошибку ECONNREFUSED при выполнении в обратном вызове fs.writeFile - PullRequest
0 голосов
/ 12 февраля 2020

У меня есть некоторый код, в котором я сгенерировал некоторые json данные, затем я бы хотел

  1. записать их в файл, а затем
  2. достичь конечной точки API (a получить запрос)

Проблема, с которой я сталкиваюсь: когда я выполняю fetch после использования fs.writeFile, я получаю ошибку ECONNREFUSED. Если я не запишу файл, мой запрос get к конечной точке будет успешным. Я помещаю свою выборку в обратный вызов функции writeFile - я также попытался fs.writeFileSync(url), которая дает мне те же результаты. Мой полный код требует, чтобы сначала был writeFile.

Я заметил, что если я оберну fetch в setTimeout с 10000 мс, тогда будет работать fetch. кажется , как будто writeFile не ждет достаточно долго, чтобы выполнить функцию обратного вызова.

Я что-то делаю неправильно? или Как правильно написать файл и затем извлечь данные API?

Я свел свой код к самому минимальному примеру для воспроизведения этого поведения, а также позволил узлу правильно возвращать сообщения об ошибках. (используя поддельный URL-адрес для этого примера, поскольку реальный URL-адрес не является общедоступным)

const fetch = require('node-fetch');                                                                                                                                                     
const fs    = require('fs');                                                                                                                                                             

try {                                                                                                                                                                                    
    fs.writeFile('./example.json', JSON.stringify(['test', 'one', 'two']), () => {                                                                               
        fetch('http://www.example.com/api_endpoint?q=test')                                                                                 
            .then(console.info)                                                                                                                                                          
            .catch(console.error);                                                                                                                                                       
    });                                                                                                                                                                                  
} catch (e) {                                                                                                                                                                            
    console.info(e);                                                                                                                                                                     
}

Я запускаю это в nodejs v10.15.1 на Linux Debian 8.11 (jess ie )

1 Ответ

1 голос
/ 12 февраля 2020

Я обнаружил проблему, это очень глупо ...

Мой сценарий находится в том же репо, что и мой сервер API. Когда сервер работает в режиме разработки (adonis serve --dev), fs.writeFile запускает средство загрузки файлов (разумеется), что временно отключает сервер. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * s * - «html»). мой случай (работа с adonis js), который adonis server --dev -i scripts

Как ни странно, это проект, который работал месяц go, и у меня тогда не было этой проблемы. Я думаю, что что-то изменилось в том, как я управляю этим между тем и сейчас.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...