在fs.writeFile回调中执行时,NodeJS fetch返回ECONNREFUSED错误

问题描述 投票:0回答:1

我有一些代码在其中生成了一些json数据,然后我想

  1. 然后将其写入文件
  2. 命中api端点(获取请求)

我遇到的问题是:使用fetch后执行fs.writeFile时,出现ECONNREFUSED错误。如果我不写文件,则对端点的获取请求成功。我将提取的内容放入writeFile函数的回调中-我也尝试过fs.writeFileSync(url),它给我相同的结果。我的完整代码要求writeFile首先出现。

我注意到,如果我将10000ms的fetch包装在setTimeout中,则提取将起作用。 似乎好像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);                                                                                                                                                                     
}

我正在Linux Debian 8.11(jessie)的nodejs v10.15.1中运行它

node.js fs fetch-api
1个回答
1
投票

我发现了问题,这真是愚蠢的...

我的脚本与我的API服务器位于同一存储库中。在开发模式(adonis serve --dev)下运行服务器时,fs.writeFile触发文件监视程序重新加载(当然),这会暂时断开服务器的连接。很明显now为什么不起作用。

解决方案是让文件监视程序忽略我正在将json文件写入到的文件夹。

在我的情况下(与adonisjs合作)为adonis server --dev -i scripts

奇怪的是,这是一个月前工作的项目,那时我没有这个问题。我猜想从那时到现在,我的运行方式有所变化。

© www.soinside.com 2019 - 2024. All rights reserved.