javascript - 使用 node-fetch 时不断让套接字挂起
问题描述
我正在尝试获取一个 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() 选项,您可以一次将所需的所有内容发送到数据库,并在一个响应中将它们发送给您。
推荐阅读
- reactjs - 在功能不起作用的套接字 io 中使用 useState 更新 dom
- css - CSS GRID how would I put some space between header and grid container with height:100%?
- vue.js - 在 vue 按钮中显示选择的城市
- reactjs - 在相关帖子中添加新评论时,平面列表未更新
- python - 硒蟒;使用xpath,find_element成功找到第一个元素,但是find_elements返回一个空集,路径不变
- blazor - 在 Blazor 中混合经过清理的 html 和原始 html
- docker - 使用“docker exec”在特权 docker 容器中访问 ttyUSB 时权限被拒绝
- python - 我不能使用命令“python3”但可以使用没有“3”的“python”,顺便安装了python
- swift - 在文本 Swift 旁边分享带有徽标的应用程序消息
- javascript - 我可以在单击按钮和获得响应方面获得一些帮助吗