• Next.js项目报错 TypeError: fetch failed


    关注 码龄 粉丝数 原力等级 -- 被采纳 被点赞 采纳率 Zohler 2024-05-07 10:59 采纳率: 0% 浏览 198 首页/ 前端 / Next.js项目报错 TypeError: fetch failed react.jsnode.jsarco design 运行nextjs 项目显示下面报错内容 TypeError: fetch failed at node:internal/deps/undici/undici:12618:11 at process.processTicksAndRejections (node:internal/process/task_queues:95:5) at async getVersionInfo (D:\React\Arco-Design\book-admin-react\node_modules\next\dist\server\dev\hot-reloader-webpack.js:215:21) at async Span.traceAsyncFn (D:\React\Arco-Design\book-admin-react\node_modules\next\dist\trace\trace.js:154:20) at async HotReloaderWebpack.start (D:\React\Arco-Design\book-admin-react\node_modules\next\dist\server\dev\hot-reloader-webpack.js:607:28) at async startWatcher (D:\React\Arco-Design\book-admin-react\node_modules\next\dist\server\lib\router-utils\setup-dev-bundler.js:156:5) at async setupDevBundler (D:\React\Arco-Design\book-admin-react\node_modules\next\dist\server\lib\router-utils\setup-dev-bundler.js:775:20) at async Span.traceAsyncFn (D:\React\Arco-Design\book-admin-react\node_modules\next\dist\trace\trace.js:154:20) at async initialize (D:\React\Arco-Design\book-admin-react\node_modules\next\dist\server\lib\router-server.js:78:30) at async Server. (D:\React\Arco-Design\book-admin-react\node_modules\next\dist\server\lib\start-server.js:249:36) { cause: Error: certificate has expired at TLSSocket.onConnectSecure (node:_tls_wrap:1674:34) at TLSSocket.emit (node:events:518:28) at TLSSocket._finishInit (node:_tls_wrap:1085:8) at ssl.onhandshakedone (node:_tls_wrap:871:12) { code: 'CERT_HAS_EXPIRED' } } 展开全部 收起 写回答 好问题 0 提建议 追加酬金 关注问题 微信扫一扫 点击复制链接 分享 邀请回答 编辑 收藏 删除 结题 收藏 举报 追加酬金 (90%的用户在追加酬金后获得了解决方案) 当前问题酬金 ¥ 0 (可追加 ¥500) ¥ 15¥ 20¥ 50¥ 100¥ 200 支付方式 扫码支付 二维码出错 点击刷新 支付金额 15 元 提供问题酬金的用户不参与问题酬金结算和分配 支付即为同意 《付费问题酬金结算规则》 结题 再想想 删除 再等等

    6条回答 默认 最新

    • 枫叶红123 2024-05-17 16:38
      关注

      一样的问题。 已解决
      原因是:
      淘宝镜像原地址2024年1月22日已过期
      现已更换镜像地址为https://registry.npmmirror.com/

      npm 和 yarn 的镜像地址不是一起的,需要各自设置各自的。
      设置yarn
      yarn config set registry https://registry.npmmirror.com/
      解决。

      评论
    • 专家-赤兔[在线] 全栈领域优质创作者 2024-05-07 10:59
      关注

      引自免费微信小程序:皆我百晓生

      看起来你在运行 Next.js 项目时遇到了一个错误,这个错误是由于证书已过期导致的。根据错误信息,Next.js 在尝试从某个位置获取版本信息时使用了 fetch 函数,但因为 SSL/TLS 证书已经过期,所以请求失败。

      为了解决这个问题,你需要检查以下几个方面:

      1. 确保你的 Node.js 版本是最新的,旧版本的 Node.js 可能与某些证书不兼容。你可以通过运行以下命令更新到最新版(如果有可用的更新):

        nvm install --latest-npm
        
      2. 如果你正在使用的是 Docker,确保你的 Docker 容器中的时间设置正确,并且没有时间同步问题。有时,容器内部的时间可能与主机不同步,导致证书验证失败。在启动 Docker 容器时添加 --tmpfs /etc/localtime:/etc/localtime:ro 参数可以临时解决此问题。

        docker run --tmpfs /etc/localtime:/etc/localtime:ro your-image-name
        
      3. 清除缓存和重新安装依赖。这有时候可以解决一些与网络相关的暂时性问题。

        npm cache clean --force
        rm -rf node_modules
        yarn install
        
      4. 检查是否有任何代理配置,特别是如果你在开发过程中使用了代理服务器。过期的证书可能会在代理服务器处产生问题。确保你的代理设置正确,并且使用的证书是有效的。

      5. 最后,如果以上方法都无法解决问题,可能是 Next.js 的热更新机制试图连接了一个不再提供服务或者证书已过期的服务器。在这种情况下,你可以在项目的根目录下创建一个名为 .env.local 的文件(如果还没有的话),然后添加以下行来禁用自动刷新:

        DISABLE_HMR=1
        

        这将阻止 Next.js 使用热模块替换功能,从而避免触发那个失败的 fetch 请求。

      执行上述步骤后,再次运行你的 Next.js 项目:

      yarn run dev
      

      这样应该能解决因证书过期导致的错误。如果你的问题依然存在,可能需要进一步排查网络环境或者联系你的网络管理员确认是否有特定的网络限制或防火墙设置影响了 fetch 请求。

      展开全部

      评论 编辑记录
    • 码农阿豪@新空间代码工作室 Java领域优质创作者 2024-05-07 10:59
      关注
      让阿豪来帮你解答,本回答参考chatgpt3.5编写提供,如果还有疑问可以评论或留言
      问题描述: 运行 nextjs 项目显示报错信息 TypeError: fetch failed,报错信息中还包含证书过期的错误信息。 解决方案:
      1. 首先,我们需要检查证书是否真的过期,可以通过访问使用该证书的网站来检查证书是否过期。
      2. 如果证书确实过期了,可以通过以下两种方法解决:
      3. 更新证书:获取新证书并将其替换旧证书。
      4. 关闭 SSL 验证:如果您不能获取新证书或者不想更新证书,可以尝试关闭项目中的 SSL 验证。但是这样做会减弱项目的安全性能。
      5. 如果证书没有过期,可以考虑以下解决方案:
      6. 检查网络连接:确保您的计算机可以通过网络访问互联网。
      7. 检查防火墙设置:可能您的防火墙设置阻止了项目请求接口。 代码示例: 更新证书: 如果您使用的是自己签名的证书,则应获取新的证书并将其替换旧证书。一种获取新证书的方法是使用 Let's Encrypt 工具链,该工具可以免费生成 SSL 证书并支持自动更新。 关闭 SSL 验证: 在开发环境中,关闭 SSL 验证可能是一种解决 TypeError: fetch failed 错误的方法。但是这可能会降低您应用项目的安全性。要关闭 SSL 验证,请在项目的根目录中创建 .env 文件,然后将以下内容添加到该文件中: NODE_TLS_REJECT_UNAUTHORIZED=0 这样做可以关闭项目中的 SSL 验证,并允许项目请求不受信任的证书。 检查网络连接: 确保您的计算机可以通过网络访问互联网。您可以通过打开浏览器并尝试访问任何网站来检查网络连接。 检查防火墙设置: 可能您的防火墙设置阻止了项目请求接口。请检查您的防火墙设置,并确保项目可以访问外部接口。
      评论
    • GISer Liu 2024-05-07 11:10
      关注

      该回答引用自GPT-3.5,由博主GISer Liu编写:

      这个错误提示表明你的 Next.js 项目中出现了证书过期的问题。根据错误信息,是 TLS 证书过期导致的问题。
      解决这个问题的思路是更新证书,确保你的 TLS 证书是有效的。
      以下是解决问题的步骤:

      1. 更新证书 :联系你的证书颁发机构(CA)或者管理员,获取新的证书。如果你是自签名证书,可以通过重新生成证书来解决问题。
      2. 替换证书 :一旦你获取了新的证书,将其替换掉旧的证书。
      • 如果你的证书是通过证书颁发机构颁发的,通常会提供一个更新证书的流程或者页面。
      • 如果是自签名证书,你需要将新的证书文件替换掉原先的证书文件。
      1. 重启项目 :更新证书后,重启你的 Next.js 项目,以确保新的证书生效。
      2. 验证 :确保项目重新启动后,没有出现证书相关的报错信息,可以通过访问网站来验证证书是否生效。
        以上步骤应该能够解决你遇到的 TypeError: fetch failed 报错问题。如果问题仍然存在,可能需要进一步检查你的证书配置和服务器环境。

      如果该回答解决了您的问题,请采纳!如果没有,请私信联系或评论您的疑惑

      评论
    • DTcode7 前端领域优质创作者 2024-05-15 23:53
      关注

      答案引用自chatgpt生成,望对题主有所帮助/启发;若有帮助,还望采纳!

      在Next.js项目中,fetch函数用于从服务器获取数据。当你看到TypeError: fetch failed这样的错误时,这通常意味着你的应用程序试图使用fetch函数来获取数据,但是出现了问题。

      这个问题可能由多种原因引起:

      1. 网络问题:如果你的服务器无法访问,或者请求的URL不正确,那么fetch就会失败。
      2. 跨域问题:如果你的请求是跨域的,而服务器没有设置正确的CORS(Cross-Origin Resource Sharing)头部,那么浏览器会阻止这个请求,并抛出一个错误。
      3. 服务器错误:如果服务器返回了一个错误的HTTP状态码,那么fetch也会失败。
      4. fetch函数的使用方式有误:例如,你可能没有正确地处理Promise的解析和拒绝,或者你可能在fetch函数中传递了错误的参数。

      为了解决这个问题,你需要首先确定问题的原因。你可以使用浏览器的开发者工具来查看网络请求,检查请求的URL、方法和头部是否正确,以及服务器是否返回了正确的响应。

      以下是一个基本的fetch使用示例:

      fetch('https://api.example.com/data')
        .then(response => {
          if (!response.ok) {
            throw new Error('Network response was not ok');
          }
          return response.json();
        })
        .then(data => console.log(data))
        .catch(error => console.error('There has been a problem with your fetch operation:', error));
      

      在这个示例中,我们首先检查响应的ok属性,如果它是false,那么我们抛出一个错误。然后,我们尝试将响应解析为JSON。如果在这个过程中有任何错误,我们都会在catch块中捕获它,并在控制台上打印出错误信息。

      评论
    • 毕业设计精选 2024-06-02 09:28
      关注

      你遇到的错误与尝试在使用 Next.js 框架的 Node.js 应用程序中获取资源时出现的过期 SSL 证书有关。错误的关键部分是 certificate has expiredcode: 'CERT_HAS_EXPIRED'。这通常发生在你尝试连接的服务器使用的 SSL 证书已过期时。

      以下是解决此问题的几个步骤:

      1. 更新 Node.js 和依赖项

      确保你的 Node.js 和项目依赖项是最新的。有时这些更新可以解决 SSL 问题。

      • 更新 Node.js 到最新的 LTS 版本。
      • 通过运行以下命令更新项目依赖项:
        npm update
        

      2. 忽略 SSL 证书验证(临时解决方案)

      如果这个问题阻碍了你的开发,并且你需要一个快速的临时修复,可以指示 Node.js 忽略 SSL 证书验证。这不建议用于生产环境,但对本地开发有帮助。

      在脚本的开头添加这行代码(例如在 index.js 或等效的入口点):

      process.env.NODE_TLS_REJECT_UNAUTHORIZED = '0';
      

      3. 检查 SSL 证书的过期情况

      检查你尝试连接的服务器的 SSL 证书。如果你控制服务器,应更新 SSL 证书。

      4. 更新 undici

      由于错误发生在 undici 模块中,更新它可能解决问题。你可以运行以下命令:

      npm install undici@latest
      

      5. 使用不同的 Node.js 包

      如果问题仍然存在,可以使用其他 HTTP 客户端库,如 axiosnode-fetch,作为 undici 的替代品。

      6. 检查系统日期和时间

      确保你的系统日期和时间设置正确。错误的日期和时间可能导致 SSL 证书验证失败。

      7. 配置 SSL 证书

      如果你处理的是自定义 SSL 证书,确保它们在你的环境中正确配置。你可以如下向 Node.js 提供自定义证书:

      const https = require('https');
      const fs = require('fs');
      
      const options = {
        key: fs.readFileSync('path/to/key.pem'),
        cert: fs.readFileSync('path/to/cert.pem'),
        ca: fs.readFileSync('path/to/ca.pem')
      };
      
      https.createServer(options, (req, res) => {
        res.writeHead(200);
        res.end('hello world\n');
      }).listen(8000);
      

      8. 检查代理设置

      如果你在公司防火墙后面或使用代理,确保你的代理设置正确配置。

      使用 axios 的示例

      以下是如何用 axios 替换 undici 的示例:

      const axios = require('axios');
      
      axios.get('https://example.com')
        .then(response => {
          console.log(response.data);
        })
        .catch(error => {
          console.error('Error fetching data:', error);
        });
      

      通过遵循这些步骤,你应该能够解决 CERT_HAS_EXPIRED 错误并继续开发。

      展开全部

      评论
    编辑
    预览

    报告相同问题?

  • 相关阅读:
    宠物疾病 与 光线疗法
    织梦响应式酒店民宿住宿类网站织梦模板(自适应手机端)
    推特API(Twitter API)V2 查询用户信息
    为何越来越多人选择进入软件测试行业?深度剖析软件测试的优势...
    【Verilog基础】【计算机体系结构】cache的分配策略和更新策略
    (2D、3D效果)转换有哪些?
    Spring【@Resource、@Autowired+lombook+Bean的生命周期】
    ROS速成2——机器人运动控制
    图新地球:如何添加视频到地图上,点击直接播放,汇报更顺畅
    Vue04/ 计算属性computed 介绍和完整写法 get( ) set( )
  • 原文地址:https://ask.csdn.net/questions/8099724