【问题标题】:Keep getting socket hang up when using node-fetch使用 node-fetch 时不断让套接字挂起
【发布时间】:2020-10-30 05:42:14
【问题描述】:

我正在尝试获取一个 url 以获取标题并确保它返回内容类型,以便我可以检查以确保它包含“图像”

到目前为止,我只是在数据库中循环获取要传递给 fetch 以获取内容类型的图像 url。

到此为止,然后出现套接字挂起错误。

这是我正在调用的函数

const getImage = async (url) => {
  try {
    const res = await fetch(encodeURI(url));
    console.log(res.headers.get("content-type"));
  } catch (err) {
    console.log(err);
  }
};

但是过了这么久它开始出错并且node-fetch产生以下错误:

FetchError: request to http://www.fakeurl/image.jpg failed, reason: socket hang up
at ClientRequest.<anonymous> (/home/user/code/url-check/node_modules/node-fetch/lib/index.js:1455:11)
    at ClientRequest.emit (events.js:321:20)
    at Socket.socketOnEnd (_http_client.js:463:9)
    at Socket.emit (events.js:333:22)
    at endReadableNT (_stream_readable.js:1201:12)
    at processTicksAndRejections (internal/process/task_queues.js:84:21) {

我不确定我做错了什么,我猜服务器一次收到太多请求,但不知道如何减慢或排队重试

编辑

这是调用上述函数的数据库循环:

connection.query(sql, (error, results, fields) => {
  if (error) {
    return console.error(error.message);
  }

  for (let i = 0; i < results.length; i++) {
    getImage(results[i].image_url);
  }
});

connection.end();

【问题讨论】:

    标签: javascript node.js ecmascript-2016


    【解决方案1】:

    这可能有几个原因:

    • 服务器仍在处理之前的请求
    • 您没有在每次调用后关闭端口

    我认为你应该做什么:

    • 在满足来自数据库的每个请求后关闭端口。
    • 搜索您的数据库提供商是否有 getBatch() 选项,您可以一次将所需的所有内容发送到数据库,然后它会在一个响应中将它们发送给您。

    【讨论】:

    • 我尝试在每次调用 db 后关闭连接,但它仍然会发生,错误指定了它与 node-fetch 的待办事项,我无法确定每次 fetch 后如何关闭
    猜你喜欢
    • 2015-02-08
    • 2019-02-14
    • 1970-01-01
    • 2014-12-25
    • 2019-08-02
    • 1970-01-01
    • 2019-10-14
    • 2018-02-04
    • 1970-01-01
    相关资源
    最近更新 更多