javascript - 使用 node-fetch 时不断让套接字挂起

标签 javascript node.js ecmascript-2016

我正在尝试获取一个 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();

最佳答案

发生这种情况的原因有几个:

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

  • 我认为你应该做的:
  • 在数据库满足每个请求后关闭端口。
  • 搜索您的数据库提供者是否有一个 getBatch() 选项,您可以一次将所需的所有内容发送到数据库,然后它会在一个响应中将它们发送给您。
  • 关于javascript - 使用 node-fetch 时不断让套接字挂起,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62818064/

    相关文章:

    node.js - 创建记录时出现重复键错误

    node.js - 简单的 ProxyRequire 不起作用?

    javascript - 循环中的变量

    javascript - 使用 json.net 序列化为对象

    javascript - 使用 node.js 将值传递到代理页面

    javascript - 从 JavaScript 中的异步函数返回值?

    javascript - Then 不是 axios async/await post 请求的函数

    JavaScript async/await 和 do/while 循环

    c# - JavaScript 与 C# 不起作用

    javascript - 如何根据当前时间禁用时隙