飞天618 2023-04-30 13:15 采纳率: 0%
浏览 12

vue+thinkphp6如何显示接口报错信息

vuecli+thinkphp6 前后端分离,vue读取接口时,如果接口出现错误,只显示跨域的错误信息,看不到接口的报错信息,要如何设置才能看到接口报错信息方便调试?

img

img

  • 写回答

1条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2023-04-30 16:09
    关注
    • 建议你看下这篇博客👉 :thinkphp6 + vue前端实现上传图片功能组件
    • 除此之外, 这篇博客: ThinkPHP+Vue的单页面的部署经历中的 问题三 ThinkPHP项目部署后出现500状态码 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
    • 答: 这个问题可以去我们的apache服务器看一下错误日志

      在这里插入图片描述
      在这里插入图片描述

      我的报错原因是因为什么响应头不规范的问题,于是我修改了我的跨域配置,果然就是它,这个问题困扰了我两天,才得以解决,可惜错误日志没有截图下来,有点可惜,大家也可以将这个错误日志先复制到翻译软件上,自己试着看看能不能看得懂,看不懂的话再进行百度,有时候比你直接百度要更快解决问题

    • 您还可以看一下 lampol老师的tp6/thinkphp6接口api开发/前后端分离/电商实战课程中的 tp6接口实战之前台vue页面搭建配置访问小节, 巩固相关知识点
    • 以下回答由chatgpt基于相关博客总结生成:

      根据参考资料中的内容,可以通过自定义异常处理机制来实现在vue+thinkphp6中显示接口错误信息的需求。具体实现步骤如下:

      1. 创建一个自定义异常类,继承\think\Exception类,并实现\app\exception\CustomExceptionInterface接口,例如:
      <?php 
      namespace app\exception;
      
      use think\Exception;
      use think\facade\Log;
      
      /**
       * 自定义异常类
       */
      class ApiException extends Exception implements CustomExceptionInterface
      {
          protected $message = '';
          protected $code = 0;
          protected $data = '';
      
          /**
           * 构造函数
           * @param string $msg 错误信息
           * @param int $code 错误码
           * @param mixed $data 返回数据
           */
          public function __construct($msg = '', $code = 0, $data = '')
          {
              $this->message = $msg;
              $this->code = $code;
              $this->data = $data;
          }
      
          /**
           * 显示错误信息
           */
          public function showMsg()
          {
              $msg = [
                  'code' => $this->code,
                  'msg' => $this->message,
                  'data' => $this->data,
              ];
              return json($msg);
          }
      
          /**
           * 记录异常日志
           * 异常不记录到日志的情况:
           * 1. 线上环境且不是500
           * 2. 操作者本身是管理员操作的
           * 
           * @return void
           */
          public function report()
          {
              $msg = 'code:'.$this->code.' msg:'.$this->message.' data:'.json_encode($this->data);
              if (config('app_debug') || $this->code == 500 || !empty(session('admin'))) {
                  Log::error($msg);
              }
          }
      }
      

      通过继承\think\Exception,我们可以在抛出异常时获得异常信息,进而处理异常。ApiException类中实现了\app\exception\CustomExceptionInterface接口,接口中定义了showMsg()方法,可以将异常信息以json格式返回给前端。同时,report()方法可以将异常信息记录到日志。

      1. \app\exception\Handler类中重写\think\exception\Handle类中的render()方法,处理自定义异常,例如:
      <?php 
      namespace app\exception;
      
      use think\exception\Handle;
      
      /**
       * 异常处理类
       */
      class Handler extends Handle
      {
          /**
           * 自定义异常接管
           * @param Exception $e 异常
           * @return \think\Response|\think\response\Json|\think\response\Jsonp|\think\response\Xml
           */
          public function render(\Exception $e)
          {
              if ($e instanceof ApiException) {
                  return $e->showMsg();
              }
      
              // 如果不是api异常,则使用默认的异常处理方式
              return parent::render($e);
          }
      }
      

      在重写render()方法时,先判断异常是否为自定义异常ApiException,如果是,则调用showMsg()方法将异常信息以json格式返回给前端,如果不是自定义异常,则按照默认的方式处理。

      1. \app\config\app.php中设置异常处理机制,将自定义Handler类作为异常处理类,例如:
      <?php
      // 异常处理类
      'exception_handle'       => '\\app\\exception\\Handler',
      

      最后,如果需要返回的异常信息中包含跨域的问题,请确保在对应的Controller中设置跨域头,例如:

      public function index()
      {
          header("Access-Control-Allow-Origin: *");
          // ...
      }
      

      至此,在vue+thinkphp6中显示接口错误信息的问题就解决了。当然,如果你不喜欢自定义异常处理机制,也可以像参考资料中提供的其他方法一样,选取合适的方案进行处理。

    评论

报告相同问题?

问题事件

  • 创建了问题 4月30日

悬赏问题

  • ¥15 气象网格数据与卫星轨道数据如何匹配
  • ¥100 java ee ssm项目 悬赏,感兴趣直接联系我
  • ¥15 微软账户问题不小心注销了好像
  • ¥15 x264库中预测模式字IPM、运动向量差MVD、量化后的DCT系数的位置
  • ¥15 curl 命令调用正常,程序调用报 java.net.ConnectException: connection refused
  • ¥20 关于web前端如何播放二次加密m3u8视频的问题
  • ¥15 使用百度地图api 位置函数报错?
  • ¥15 metamask如何添加TRON自定义网络
  • ¥66 关于川崎机器人调速问题
  • ¥15 winFrom界面无法打开