当前位置: 首页 > news >正文

加载资源时报错-ERR_CONNECTION_RESET,需要多次请求才能拿到资源的有效解决方案

初次加载资源时无法正常加载,需要多次刷新、请求才能拿到资源的有效解决方案

前言

在使用cloudinary进行图片上传并获取图片链接作为用户头像时发现,图片链接网址初次加载会报错:ERR_CONNECTION_RESET必须刷新几次才能获取到,原因可能是cloudinary没有国内的节点,而我用的是在新加坡的节点,所以会导致初次加载的时候被重定向。而这个错误会直接导致用户头像无法加载,因为在img中此链接只会被在初始化的时候加载一次,而此博客就是为了解决此问题让图片正常加载。

正文

我的思路就是监听图片地址是否能正常获取,若是获取失败则一直刷新直到图片正常加载,具体看下面代码:

修改前:

import { signOut, useSession } from 'next-auth/react';
import Link from 'next/link'
import React from 'react'
import { SessionData } from '../lib/type';
import { Logout } from '@mui/icons-material';
const handleLogout = () => {signOut({ callbackUrl: '/auth/login' });
}
const TopBar = () => {const { data: session } = useSession();const user = session?.user as SessionData | null;return (<div className='bg-white h-9 border-x-1 flex justify-between'><p className='text-center mt-2 ml-2 font-sans text-small antialiased font-bold'>NextChat</p><div className='flex'><Link rel="stylesheet" href="/chats/profile"><imgsrc={user?.image || "/images/person.jpg"}alt="image"className="w-8 h-8 rounded-full mt-[2px]" /></Link><div className='mx-4'><p className='text-center font-sans text-small antialiased font-bold'>{user?.username}</p><p className='text-center font-sans text-mm antialiased font-bold text-gray-500'>{user?.email}</p></div><Logout sx={{ color: "#737373", cursor: "pointer" }} onClick={handleLogout} className='mt-1 mr-4'/></div></div>)
}
export default TopBar

修改后:

import { signOut, useSession } from 'next-auth/react';
import Link from 'next/link'
import React, { useEffect, useRef } from 'react'
import { SessionData } from '../lib/type';
import { Logout } from '@mui/icons-material';
const handleLogout = () => {signOut({ callbackUrl: '/auth/login' });
}
const TopBar = () => {const { data: session } = useSession();const user = session?.user as SessionData | null;const imageRef = useRef<HTMLImageElement | null>(null);const handleImageError = () => {if (imageRef.current) {imageRef.current.src = user?.image || "/images/person.jpg";}};useEffect(() => {if (imageRef.current) {imageRef.current.onerror = handleImageError;}}, [user?.image]);return (<div className='bg-white h-9 border-x-1 flex justify-between'><p className='text-center mt-2 ml-2 font-sans text-small antialiased font-bold'>NextChat</p><div className='flex'><Link rel="stylesheet" href="/chats/profile"><imgref={imageRef}src={user?.image || "/images/person.jpg"}alt="image"className="w-8 h-8 rounded-full mt-[2px]" /></Link><div className='mx-4'><p className='text-center font-sans text-small antialiased font-bold'>{user?.username}</p><p className='text-center font-sans text-mm antialiased font-bold text-gray-500'>{user?.email}</p></div><Logout sx={{ color: "#737373", cursor: "pointer" }} onClick={handleLogout} className='mt-1 mr-4'/></div></div>)
}export default TopBar

在这个修改后的代码中,我定义了一个名为 imageRefuseRef 来存储图像元素的引用。然后,我使用 useEffect 钩子来监听 user?.image 的变化,并在其变化时更新图像的 onerror 事件处理函数。当图像加载失败时,handleImageError 函数会被调用,重新设置图像的 src 属性为原始的 user?.image 或默认图片的路径,如果在处理函数 handleImageError 中将图片 src 重新设置为另一个同样会加载失败的图片地址,这会再次触发 onerror 事件。这样图片就会一直尝试重新加载,直到成功为止。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Java 入门指南:JVM(Java虚拟机)——类的生命周期与加载过程
  • 【GO语言】Go语言详解与应用场景分析,与Java的对比及优缺点
  • 【RabbitMQ 项目】服务端数据管理模块之交换机管理
  • 项目需求 | MySQL增量备份与恢复的完整操作指南
  • 「OC」事件点击demo合集
  • 【智路】智路OS Perception Fusion Service
  • spring boot设置多环境的配置文件
  • 【Android Studio】使用雷电模拟器调试
  • 研1日记12
  • SpringBlade dict-biz/list 接口 SQL 注入漏洞
  • 从大脑图谱/ROI中提取BOLD信号
  • linux学习--第五天
  • PG表空间
  • unity3d入门教程五
  • 安全区域边界等保测评
  • JS中 map, filter, some, every, forEach, for in, for of 用法总结
  • [rust! #004] [译] Rust 的内置 Traits, 使用场景, 方式, 和原因
  • CSS盒模型深入
  • docker python 配置
  • egg(89)--egg之redis的发布和订阅
  • Java精华积累:初学者都应该搞懂的问题
  • Laravel Telescope:优雅的应用调试工具
  • Three.js 再探 - 写一个跳一跳极简版游戏
  • Webpack4 学习笔记 - 01:webpack的安装和简单配置
  • 从0到1:PostCSS 插件开发最佳实践
  • 给第三方使用接口的 URL 签名实现
  • 三栏布局总结
  • 深度学习中的信息论知识详解
  • 通过git安装npm私有模块
  • 小试R空间处理新库sf
  • 正则表达式小结
  • 正则与JS中的正则
  • LIGO、Virgo第三轮探测告捷,同时探测到一对黑洞合并产生的引力波事件 ...
  • ​Python 3 新特性:类型注解
  • ​软考-高级-信息系统项目管理师教程 第四版【第14章-项目沟通管理-思维导图】​
  • ###C语言程序设计-----C语言学习(3)#
  • (6)【Python/机器学习/深度学习】Machine-Learning模型与算法应用—使用Adaboost建模及工作环境下的数据分析整理
  • (C++17) optional的使用
  • (cljs/run-at (JSVM. :browser) 搭建刚好可用的开发环境!)
  • (Redis使用系列) Springboot 实现Redis 同数据源动态切换db 八
  • (第61天)多租户架构(CDB/PDB)
  • (第9篇)大数据的的超级应用——数据挖掘-推荐系统
  • (多级缓存)多级缓存
  • (二)【Jmeter】专栏实战项目靶场drupal部署
  • (十) 初识 Docker file
  • (十六)一篇文章学会Java的常用API
  • (一)Spring Cloud 直击微服务作用、架构应用、hystrix降级
  • .bat批处理出现中文乱码的情况
  • .net core IResultFilter 的 OnResultExecuted和OnResultExecuting的区别
  • .NET Core6.0 MVC+layui+SqlSugar 简单增删改查
  • .net Stream篇(六)
  • .NET 表达式计算:Expression Evaluator
  • .Net环境下的缓存技术介绍
  • .NET开源的一个小而快并且功能强大的 Windows 动态桌面软件 - DreamScene2
  • .NET中的Exception处理(C#)