当前位置:首页>鸿蒙APP>鸿蒙基础网络请求库封装实现:链式调用+拦截器+多格式请求

鸿蒙基础网络请求库封装实现:链式调用+拦截器+多格式请求

  • 2026-06-20 06:08:23
鸿蒙基础网络请求库封装实现:链式调用+拦截器+多格式请求

为啥要封装一个网络请求库

直接使用鸿蒙官方的 http 模块,每个请求都要 createHttp()、设 header、解析响应、destroy()……太繁琐了。

今天分享一套我自己封装的网络库,支持全局配置、链式 API、请求/响应拦截器、JSON/表单/二进制/文件上传,完整代码已整理上传。

httpDemo:https://gitee.com/HarmonyOS-UI-Basics/harmony-os-ui-basics.git

先看效果

将网络请求模块化处理:我们需要准备啥?以登录接口为例:

1. 登录请求数据参数类
// 1. 定义请求体接口interface LoginRequest {  username: string;  password: string;}
2. 接收数据响应类
// 定义响应体接口 依据后端返回数据格式interface ApiResponse<T> {  code: number;  message: string;  data: T;}interface AuthTokenModel {  accessToken: string;  refreshToken: string;  userId: string;}
3. 构造请求参数
const request: LoginRequest = {   username: this.username.trim(),   password: encryptedPassword };
4. 发起登录请求
const resp = await httpClient.post(APIConstants.API_LOGIN) .json(request) .execute<ApiResponse<AuthTokenModel>>();// 使用响应if (resp.status === 200 && resp.data.code === 200) { this.authToken.accessToken = resp.data.data.accessToken; this.authToken.refreshToken = resp.data.data.refreshToken; this.authToken.userId = resp.data.data.userId; promptAction.showToast({ message: '登录成功' });else { promptAction.showToast({ message: resp.data.message || '登录失败' });}

注意

  • httpClient.post(url) 中的 url 是相对路径(如 'api/v1/auth/login'),baseUrl 已在 HttpConfig 中全局配置。

  • .json(parameter) 自动序列化并设置 Content-Type: application/json

  • 通过泛型 <ApiResponse<AuthTokenModel>> 直接获得类型安全的响应数据。

  • 无需手动 createHttp()、解析 response.resultdestroy(),库内部已处理。

全局配置

在应用启动时(例如 EntryAbility 的 onCreate 或 Index 页面的 aboutToAppear),对网络库进行全局配置:

import { httpClient, HttpConfig } from '@happy/http';import { APIConstants } from '../common/APIConstants';// 配置全局网络参数(只需执行一次)HttpConfig.getInstance()  .setBaseUrl(APIConstants.BASE_URL)     .setTimeout(30000)                   // 全局超时(毫秒)  .setDefaultHeader('Content-Type''application/json');// 请求拦截器:自动注入 tokenhttpClient.addRequestInterceptor({  onRequest(options) => {     options.token = token;    return options;  }});// 响应拦截器:统一处理 401httpClient.addResponseInterceptor({  onResponse(response) => {    if (response.status === 401console.log('未授权,请重新登录');    return response;  },  onError(error) => console.error('网络错误:', error.message)});

配置后,所有请求都会自动携带 baseUrl、默认超时、默认 header,并通过拦截器统一处理 token 和错误。

前后对比

痛点
解决方案
重复创建/销毁 httpRequest
库内部自动管理生命周期
baseUrl
、超时散落各处
HttpConfig
 单例集中配置
响应数据需手动解析 JSON
自动处理 string/ArrayBuffer/Object 并转为 JSON
无法统一处理 token、401
请求/响应拦截器
进度回调、请求取消
原生支持
大文件内存溢出
本库只负责小文件(≤10MB),大文件用后续 request.agent 方案

整体架构

调用层(业务代码)       导出层(index.ets)   仅暴露 httpClient 单例和类型       接口层(HttpClientInterface)  get/post/put/delete/upload + 拦截器管理       构建器层(GetBuilder/PostBuilder/...)  链式参数请求体       核心层(HttpClient)  发送请求执行拦截器解析响应       配置层(HttpConfig)  baseUrl默认超时默认头

所有 Builder 类不对外导出,只能通过 httpClient 单例获取,保证封装性。

核心代码片段

1. 全局配置(单例)

// config/HttpConfig.etsexport class HttpConfig {  private static instanceHttpConfig;  public baseUrl = '';  public defaultTimeout = 30000;  public defaultHeadersRecord<stringstring> = {};  static getInstance(): HttpConfig {    if (!HttpConfig.instance) {      HttpConfig.instance = new HttpConfig();    }    return HttpConfig.instance;  }  setBaseUrl(urlstring): HttpConfig {    this.baseUrl = url;    return this;  }  setTimeout(msnumber): HttpConfig {    this.defaultTimeout = ms;    return this;  }  setDefaultHeader(keystringvaluestring): HttpConfig {    this.defaultHeaders[key] = value;    return this;  }}

2. 抽象构建器 BaseBuilder

所有构建器继承此类,统一处理 URL 参数、header、超时、进度、取消。

// builder/BaseBuilder.ets(关键方法)export abstract class BaseBuilder<T> {  protected options: RequestOptions;  private onProgressCallback?: (loaded: number, total: number) => void;  private httpRequest?: http.HttpRequest;  public param(key: string, value: string | number | boolean): BaseBuilder<T> {    if (!this.options.params) this.options.params = new url.URLParams();    this.options.params.append(key, String(value));    return this;  }  public header(key: string, value: string): BaseBuilder<T> {    if (!this.options.headers) this.options.headers = {};    this.options.headers[key] = value;    return this;  }  public token(token: string): BaseBuilder<T> {    this.options.token = token;    return this;  }  public timeout(ms: number): BaseBuilder<T> {    this.options.timeout = ms;    return this;  }  public onProgress(cb: (loaded: number, total: number) => void): BaseBuilder<T> {    this.onProgressCallback = cb;    return this;  }  public cancel(): void {    this.httpRequest?.destroy();  }  public async execute<TRes = object>(): Promise<HttpResponse<TRes>> {    return this.send<TRes>();  }}

3. 具体构建器(以 PostBuilder 为例)

// builder/PostBuilder.etsexport class PostBuilder extends BaseBuilder<PostBuilder> {  constructor(url: string) {    super(url, 'POST');  }  public json(dataobject): PostBuilder {    this.options.body = JSON.stringify(data);    this.header('Content-Type''application/json');    return this;  }  public form(data: Record<string, string>): PostBuilder {    const parts = Object.entries(data).map(([k, v]) => `${encodeURIComponent(k)}=${encodeURIComponent(v)}`);    this.options.body = parts.join('&');    this.header('Content-Type''application/x-www-form-urlencoded');    return this;  }  public binary(data: ArrayBuffer): PostBuilder {    this.options.body = data;    return this;  }}

4. 拦截器接口

// interceptors/Interceptor.etsexport interface RequestInterceptor {  onRequest(optionsRequestOptions) => RequestOptions | Promise<RequestOptions>;}export interface ResponseInterceptor {  onResponse(responseHttpResponse<object>) => HttpResponse<object> | Promise<HttpResponse<object>>;  onError?: (errorError) => void;}

5. 核心发送器 HttpClient(精简)

// core/HttpClient.etsexport class HttpClient implements HttpClientInterface {  // ... 单例、get/post/put/delete/upload 方法  public async send<T>(    optionsRequestOptions,    onProgress?: (loadednumbertotalnumber) => void,    builder?: BaseBuilder<object>  ): Promise<HttpResponse<T>> {    // 1. 执行请求拦截器    const intercepted = await this.applyRequestInterceptors(options);    // 2. 创建 httpRequest    const httpRequest = http.createHttp();    builder?.setHttpRequest(httpRequest);    // 3. 设置 header、超时、进度    // 4. 发起请求    const raw = await httpRequest.request(intercepted.url, reqOptions);    // 5. 自动解析响应(string / ArrayBuffer / Object)    let data: T;    const result = raw.result;    if (typeof result === 'string') {      try { data = JSON.parse(result) as T; } catch { data = result as T; }    } else if (result instanceof ArrayBuffer) {      const str = new util.TextDecoder().decodeToString(new Uint8Array(result));      try { data = JSON.parse(str) as T; } catch { data = str as T; }    } else {      data = result as T;    }    // 6. 执行响应拦截器    // 7. 销毁请求    return { status: raw.responseCode, data };  }}

6. 导出层 index.ets

export { HttpConfig } from './src/main/ets/config/HttpConfig';export { httpClient } from './src/main/ets/core/HttpClient';export { RequestInterceptorResponseInterceptor } from './src/main/ets/interceptors/Interceptor';export type { HttpResponseHttpMethodRequestOptions } from './src/main/ets/model/types';export type { GetBuilderPostBuilderPutBuilderDeleteBuilderUploadBuilder } from './src/main/ets/builder';

使用示例

1. POST 登录请求同(一、先看效果)

2. GET 请求

interface User {  id: number;  name: string;}const users = await httpClient.get('/users')  .param('page'1)  .param('size'10)  .execute<User[]>();

3. 文件上传(multipart)

测试请基于真实后台接口修改参数。

interface UploadResponse {  urlstring;}const fileBuffer = await readFileToArrayBuffer(selectedImageUri); // 自行实现const result = await httpClient.upload('/api/upload')  .field('description''我的照片')  .file('file', fileBuffer, 'photo.jpg''image/jpeg')  .timeout(60000)  .onProgress((loaded, total) => console.log(`${loaded}/${total}`))  .execute<UploadResponse>();

4. 手动取消请求

const builder = httpClient.get('/long-report').param('year'2025);const promise = builder.execute();builder.cancel();promise.catch(err => console.log('已取消:', err.message));

踩坑必读

1. ArkTS 不允许匿名对象字面量

所有请求体、参数对象、响应类型都必须先用 interface 定义,不能在泛型里写 { token: string }

2. 链式调用顺序约束必须先调用请求体方法(.json().form().file()),再调用公共方法(.param().timeout()。因为公共方法返回基类 BaseBuilder<T>,会丢失子类特有方法。execute 始终在最后。

3. 当前不适合大文件下载http 模块会将整个响应加载到内存,超过 10MB 的文件会导致 OOM。大文件请等待后续 request.agent 方案。

4. 进度回调仅适用于小文件同样因为内存原因,不要用它监听几十 MB 的文件。

5. 响应数据类型自动解析库内部已经处理了 string/ArrayBuffer/Object 到 JSON 的转换,你只需要用泛型指定业务类型即可。

6.请求结束后自动销毁不需要手动 destroy(),取消时调用 builder.cancel()

7.拦截器异步支持onRequest / onResponse 可以返回 Promise,方便做异步 token 刷新。

完整源码

所有代码已上传。

仓库地址https://gitee.com/HarmonyOS-UI-Basics/harmony-os-ui-basics.git

仓库结构:

http/├── config/HttpConfig.ets├── model/types.ets├── interceptors/Interceptor.ets├── builder/BaseBuilder.ets├── builder/GetBuilder.ets├── builder/PostBuilder.ets├── builder/PutBuilder.ets├── builder/DeleteBuilder.ets├── builder/UploadBuilder.ets├── core/HttpClient.ets├── interface/HttpClientInterface.ets└── index.ets

下期预告

基于 request.agent 的大文件上传/下载组件(支持后台运行、断点续传、系统通知栏、任务分组、任务恢复)。

敬请期待!

最新文章

随机文章

基本 文件 流程 错误 SQL 调试
  1. 请求信息 : 2026-07-11 17:04:37 HTTP/2.0 GET : https://c.mffb.com.cn/a/493577.html
  2. 运行时间 : 0.086332s [ 吞吐率:11.58req/s ] 内存消耗:4,352.54kb 文件加载:140
  3. 缓存信息 : 0 reads,0 writes
  4. 会话信息 : SESSION_ID=5e7f1515d5a01239105dff9dfa80fa43
  1. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/public/index.php ( 0.79 KB )
  2. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/autoload.php ( 0.17 KB )
  3. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/composer/autoload_real.php ( 2.49 KB )
  4. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/composer/platform_check.php ( 0.90 KB )
  5. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/composer/ClassLoader.php ( 14.03 KB )
  6. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/composer/autoload_static.php ( 4.90 KB )
  7. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-helper/src/helper.php ( 8.34 KB )
  8. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-validate/src/helper.php ( 2.19 KB )
  9. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-orm/src/helper.php ( 1.47 KB )
  10. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-orm/stubs/load_stubs.php ( 0.16 KB )
  11. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/Exception.php ( 1.69 KB )
  12. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-container/src/Facade.php ( 2.71 KB )
  13. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/symfony/deprecation-contracts/function.php ( 0.99 KB )
  14. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/symfony/polyfill-mbstring/bootstrap.php ( 8.26 KB )
  15. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/symfony/polyfill-mbstring/bootstrap80.php ( 9.78 KB )
  16. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/symfony/var-dumper/Resources/functions/dump.php ( 1.49 KB )
  17. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-dumper/src/helper.php ( 0.18 KB )
  18. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/symfony/var-dumper/VarDumper.php ( 4.30 KB )
  19. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/App.php ( 15.30 KB )
  20. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-container/src/Container.php ( 15.76 KB )
  21. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/psr/container/src/ContainerInterface.php ( 1.02 KB )
  22. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/app/provider.php ( 0.19 KB )
  23. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/Http.php ( 6.04 KB )
  24. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-helper/src/helper/Str.php ( 7.29 KB )
  25. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/Env.php ( 4.68 KB )
  26. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/app/common.php ( 0.03 KB )
  27. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/helper.php ( 18.78 KB )
  28. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/Config.php ( 5.54 KB )
  29. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/config/app.php ( 0.95 KB )
  30. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/config/cache.php ( 0.78 KB )
  31. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/config/console.php ( 0.23 KB )
  32. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/config/cookie.php ( 0.56 KB )
  33. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/config/database.php ( 2.48 KB )
  34. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/facade/Env.php ( 1.67 KB )
  35. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/config/filesystem.php ( 0.61 KB )
  36. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/config/lang.php ( 0.91 KB )
  37. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/config/log.php ( 1.35 KB )
  38. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/config/middleware.php ( 0.19 KB )
  39. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/config/route.php ( 1.89 KB )
  40. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/config/session.php ( 0.57 KB )
  41. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/config/trace.php ( 0.34 KB )
  42. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/config/view.php ( 0.82 KB )
  43. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/app/event.php ( 0.25 KB )
  44. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/Event.php ( 7.67 KB )
  45. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/app/service.php ( 0.13 KB )
  46. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/app/AppService.php ( 0.26 KB )
  47. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/Service.php ( 1.64 KB )
  48. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/Lang.php ( 7.35 KB )
  49. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/lang/zh-cn.php ( 13.70 KB )
  50. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/initializer/Error.php ( 3.31 KB )
  51. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/initializer/RegisterService.php ( 1.33 KB )
  52. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/services.php ( 0.14 KB )
  53. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/service/PaginatorService.php ( 1.52 KB )
  54. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/service/ValidateService.php ( 0.99 KB )
  55. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/service/ModelService.php ( 2.04 KB )
  56. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-trace/src/Service.php ( 0.77 KB )
  57. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/Middleware.php ( 6.72 KB )
  58. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/initializer/BootService.php ( 0.77 KB )
  59. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-orm/src/Paginator.php ( 11.86 KB )
  60. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-validate/src/Validate.php ( 63.20 KB )
  61. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-orm/src/Model.php ( 23.55 KB )
  62. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/Attribute.php ( 21.05 KB )
  63. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/AutoWriteData.php ( 4.21 KB )
  64. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/Conversion.php ( 6.44 KB )
  65. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/DbConnect.php ( 5.16 KB )
  66. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/ModelEvent.php ( 2.33 KB )
  67. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/RelationShip.php ( 28.29 KB )
  68. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-helper/src/contract/Arrayable.php ( 0.09 KB )
  69. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-helper/src/contract/Jsonable.php ( 0.13 KB )
  70. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-orm/src/model/contract/Modelable.php ( 0.09 KB )
  71. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/Db.php ( 2.88 KB )
  72. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-orm/src/DbManager.php ( 8.52 KB )
  73. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/Log.php ( 6.28 KB )
  74. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/Manager.php ( 3.92 KB )
  75. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/psr/log/src/LoggerTrait.php ( 2.69 KB )
  76. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/psr/log/src/LoggerInterface.php ( 2.71 KB )
  77. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/Cache.php ( 4.92 KB )
  78. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/psr/simple-cache/src/CacheInterface.php ( 4.71 KB )
  79. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-helper/src/helper/Arr.php ( 16.63 KB )
  80. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/cache/driver/File.php ( 7.84 KB )
  81. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/cache/Driver.php ( 9.03 KB )
  82. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/contract/CacheHandlerInterface.php ( 1.99 KB )
  83. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/app/Request.php ( 0.09 KB )
  84. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/Request.php ( 55.78 KB )
  85. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/app/middleware.php ( 0.25 KB )
  86. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/Pipeline.php ( 2.61 KB )
  87. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-trace/src/TraceDebug.php ( 3.40 KB )
  88. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/middleware/SessionInit.php ( 1.94 KB )
  89. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/Session.php ( 1.80 KB )
  90. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/session/driver/File.php ( 6.27 KB )
  91. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/contract/SessionHandlerInterface.php ( 0.87 KB )
  92. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/session/Store.php ( 7.12 KB )
  93. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/Route.php ( 23.73 KB )
  94. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/route/RuleName.php ( 5.75 KB )
  95. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/route/Domain.php ( 2.53 KB )
  96. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/route/RuleGroup.php ( 22.43 KB )
  97. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/route/Rule.php ( 26.95 KB )
  98. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/route/RuleItem.php ( 9.78 KB )
  99. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/route/app.php ( 1.72 KB )
  100. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/facade/Route.php ( 4.70 KB )
  101. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/route/dispatch/Controller.php ( 4.74 KB )
  102. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/route/Dispatch.php ( 10.44 KB )
  103. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/app/controller/Index.php ( 4.81 KB )
  104. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/app/BaseController.php ( 2.05 KB )
  105. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-orm/src/facade/Db.php ( 0.93 KB )
  106. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-orm/src/db/connector/Mysql.php ( 5.44 KB )
  107. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-orm/src/db/PDOConnection.php ( 52.47 KB )
  108. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-orm/src/db/Connection.php ( 8.39 KB )
  109. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-orm/src/db/ConnectionInterface.php ( 4.57 KB )
  110. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-orm/src/db/builder/Mysql.php ( 16.58 KB )
  111. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-orm/src/db/Builder.php ( 24.06 KB )
  112. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-orm/src/db/BaseBuilder.php ( 27.50 KB )
  113. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-orm/src/db/Query.php ( 15.71 KB )
  114. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-orm/src/db/BaseQuery.php ( 45.13 KB )
  115. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/TimeFieldQuery.php ( 7.43 KB )
  116. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/AggregateQuery.php ( 3.26 KB )
  117. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/ModelRelationQuery.php ( 20.07 KB )
  118. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/ParamsBind.php ( 3.66 KB )
  119. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/ResultOperation.php ( 7.01 KB )
  120. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/WhereQuery.php ( 19.37 KB )
  121. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/JoinAndViewQuery.php ( 7.11 KB )
  122. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/TableFieldInfo.php ( 2.63 KB )
  123. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/Transaction.php ( 2.77 KB )
  124. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/log/driver/File.php ( 5.96 KB )
  125. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/contract/LogHandlerInterface.php ( 0.86 KB )
  126. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/log/Channel.php ( 3.89 KB )
  127. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/event/LogRecord.php ( 1.02 KB )
  128. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-helper/src/Collection.php ( 16.47 KB )
  129. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/facade/View.php ( 1.70 KB )
  130. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/View.php ( 4.39 KB )
  131. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/Response.php ( 8.81 KB )
  132. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/response/View.php ( 3.29 KB )
  133. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/Cookie.php ( 6.06 KB )
  134. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-view/src/Think.php ( 8.38 KB )
  135. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/contract/TemplateHandlerInterface.php ( 1.60 KB )
  136. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-template/src/Template.php ( 46.61 KB )
  137. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-template/src/template/driver/File.php ( 2.41 KB )
  138. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-template/src/template/contract/DriverInterface.php ( 0.86 KB )
  139. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/runtime/temp/cefbf809ba1a84190cb04b0cb7abcf79.php ( 11.98 KB )
  140. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-trace/src/Html.php ( 4.42 KB )
  1. CONNECT:[ UseTime:0.000644s ] mysql:host=127.0.0.1;port=3306;dbname=c_mffb;charset=utf8mb4
  2. SHOW FULL COLUMNS FROM `fenlei` [ RunTime:0.000911s ]
  3. SELECT * FROM `fenlei` WHERE `fid` = 0 [ RunTime:0.000390s ]
  4. SELECT * FROM `fenlei` WHERE `fid` = 63 [ RunTime:0.000324s ]
  5. SHOW FULL COLUMNS FROM `set` [ RunTime:0.000722s ]
  6. SELECT * FROM `set` [ RunTime:0.000217s ]
  7. SHOW FULL COLUMNS FROM `article` [ RunTime:0.000667s ]
  8. SELECT * FROM `article` WHERE `id` = 493577 LIMIT 1 [ RunTime:0.000624s ]
  9. UPDATE `article` SET `lasttime` = 1783760677 WHERE `id` = 493577 [ RunTime:0.007213s ]
  10. SELECT * FROM `fenlei` WHERE `id` = 66 LIMIT 1 [ RunTime:0.000333s ]
  11. SELECT * FROM `article` WHERE `id` < 493577 ORDER BY `id` DESC LIMIT 1 [ RunTime:0.000738s ]
  12. SELECT * FROM `article` WHERE `id` > 493577 ORDER BY `id` ASC LIMIT 1 [ RunTime:0.000494s ]
  13. SELECT * FROM `article` WHERE `id` < 493577 ORDER BY `id` DESC LIMIT 10 [ RunTime:0.002398s ]
  14. SELECT * FROM `article` WHERE `id` < 493577 ORDER BY `id` DESC LIMIT 10,10 [ RunTime:0.001056s ]
  15. SELECT * FROM `article` WHERE `id` < 493577 ORDER BY `id` DESC LIMIT 20,10 [ RunTime:0.001822s ]
0.087959s