• axios


    axios

    一些关于axios的使用技巧

    拦截器

     var baseUrl = "http://localhost:19800/api/";
        const request = axios.create({
          // api 的 base_url
          baseURL: baseUrl,
          timeout: 1000 * 60 * 5 //5分钟
          // 请求超时时间
        });
        // response 拦截器
        request.interceptors.response.use(
          response => {
            const res = response.data
            if (res.statusCode !== 200) {
              switch (res.statusCode) {
                case 500:
                  app.errorNotify(res.message)
                  break;
                //return Promise.reject(res) //服务器内部错误则不执行后续方法,不行,如果有按钮要处理什么的
                default:
                  app.errorNotify(res.message)
                  break;
              }
            }
            return res
          },
          error => {
            app.errorNotify('请求接口失败,请确保连接到服务器')
            return Promise.reject(error)
          }
        )
    
    • 后端定义了ApiResult结构体,但是无法跑到拦截器的res里面。 //例如全局异常
      • 原因:后端返回异常的时候,状态码是错误的,导致网络请求返回的也是错误
      • 解决
        • context.Response.StatusCode = (int)HttpStatusCode.OK;,原本是HttpStatusCode.InternalServerError
    • 全局异常
                //全局异常
                app.UseExceptionHandler(builder =>
                {
                    builder.Run(async context =>
                    {
                        context.Response.StatusCode = (int)HttpStatusCode.OK;//!!!
                        context.Response.ContentType = "application/json";
    
                        var exception = context.Features.Get<IExceptionHandlerFeature>();
                        if (exception != null)
                        {
                           var log= NLog.LogManager.GetCurrentClassLogger();
                            log.Error(exception.Error);
                            var error = new ApiResult
                            {
                                StatusCode = 500,
                                Message = exception.Error.Message,
                            };
                            //https://www.cnblogs.com/jiyuwu/p/11882144.html
                            var serializerSettings = new JsonSerializerSettings
                            {
                                ReferenceLoopHandling = ReferenceLoopHandling.Ignore,
                                DateFormatString = "yyyy/MM/dd HH:mm:ss",
                                // 设置为驼峰命名
                                ContractResolver = new LowercaseContractResolver()
                            };
                            var errObj = JsonConvert.SerializeObject(error, serializerSettings);
                            //var errObj = JsonConvert.SerializeObject(new JsonResult(error));
                                    await context.Response.WriteAsync(errObj).ConfigureAwait(false);
                                }
                            });
                        }
                  );
    
    

    todo

  • 相关阅读:
    C++ 动态链接库、静态链接库
    WIN32 PE结构 重定位表
    WIN32 PE Bound Import 绑定导入表
    WIN32申请内存 物理页 VirtualAlloc VirtualFree
    PE文件结构详解 PE导入表
    PE文件结构详解 PE导出表
    WIN PE文件插入MessageBox
    WIN32 创建窗口 WNDCLASS 和CreateWindow
    053464
    053463
  • 原文地址:https://www.cnblogs.com/Alex-Mercer/p/15513722.html
Copyright © 2020-2023  润新知