_HttpClient

@yelon/theme 包含了一个叫 _HttpClient 类,其本质还是调用 Angular 的 HttpClient

特性

  • 更友好的调用方法

  • 维护 loading 属性

  • 处理空值

  • 统一时间格式为时间戳

  • 支持修饰器 @GET、@POST 等

示例

网络请求一般情况下是同 Object 对象做为参数一起使用,例如一个 get 请求,原始写法:

HttpClient.get(url, { params: { pi: 1 } });

而对于 _HttpClient 来讲,将参数进一步优化为:

_HttpClient.get(url, { pi: 1 });

YunzaiThemeConfig

通用配置项,例如统一对 _HttpClient 设置空值、时间处理方式。

import { YunzaiThemeConfig } from '@yelon/theme';
export function fnYunzaiThemeConfig(): YunzaiThemeConfig {
  return Object.assign(new YunzaiThemeConfig(), {
    http: {
      nullValueHandling: 'ignore',
    },
  });
}

@NgModule({})
export class YelonModule {
  static forRoot(): ModuleWithProviders {
    return {
      ngModule: YelonModule,
      providers: [
        { provide: YunzaiThemeConfig, useFactory: fnYunzaiThemeConfig },
      ],
    };
  }
}

API

参数说明类型默认值
nullValueHandling空值处理include,ignoreinclude
dateValueHandling时间值处理timestamp,ignoretimestamp

使用修饰器

目标类都必须继承 BaseApi 基类。

示例

@BaseUrl('/user')
@BaseHeaders({ bh: 'a' })
class RestService extends BaseApi {
  @GET()
  query(@Query('pi') pi: number, @Query('ps') ps: number): Observable {
    return;
  }

  @GET(':id')
  get(@Path('id') id: number): Observable {
    return;
  }

  @GET()
  get(@Payload data: {}): Observable {
    return;
  }

  // 使用 `::id` 来表示转义,若 `id` 值为 `undefined` 会忽略转换,例如:
  // 当 `id` 为 `10` 时 => 10:type
  // 当 `id` 为 `undefined` 时 => :id:type
  @GET(':id::type')
  get(@Path('id') id: number): Observable {
    return;
  }

  @POST(':id')
  save(@Path('id') id: number, @Body data: Object): Observable {
    return;
  }

  @POST()
  save(@Payload data: {}): Observable {
    return;
  }

  @FORM()
  save(@Payload data: {}): Observable {
    return;
  }
  
  // 若请求的URL不符合授权要求,会直接抛出 `401` 错误,且不发送请求
  @GET('', { acl: 'admin' })
  ACL(): Observable {
    return;
  }
}

  • @BaseUrl(url: string)

  • @BaseHeaders(headers: HttpHeaders | { [header: string]: string | string[] })

方法

HttpOptions

参数说明类型默认值
aclACL 配置,若导入 @yelon/acl 时自动有效,等同于 ACLService.can(roleOrAbility: ACLCanType) 参数值any-
observe指定响应内容body,events,response-
responseType指定内容格式arraybuffer,blob,json,text-
reportProgress是否监听进度事件boolean-
withCredentials设置 withCredentialsboolean-

参数

  • @Path(key?: string) URL 路由参数

  • @Query(key?: string) URL 参数 QueryString

  • @Body 参数 Body

  • @Headers(key?: string) 参数 Headers

  • @Payload 请求负载

    • 当支持 Body 时(例如:POSTPUT)为内容体等同 @Body

    • 当不支持 Body 时(例如:GETDELETE 等)为 QueryString

HttpContext

CUSTOM_ERROR

是否自定义处理异常消息。

this.http.post(`login`, {
 name: 'yunzai-bot', pwd: '123456'
}, {
 context: new HttpContext()
             .set(ALLOW_ANONYMOUS, true)
             .set(CUSTOM_ERROR, true)
}).subscribe({
 next: console.log,
 error: console.log
});

IGNORE_BASE_URL

是否忽略API前缀。

// When environment.api.baseUrl set '/api'

this.http.get(`/path`) // Request Url: /api/path
this.http.get(`/path`, { context: new HttpContext().set(IGNORE_BASE_URL, true) }) // Request Url: /path

RAW_BODY

是否原样返回请求Body。

Loading...