useApi

  • 用于定义一个路由函数入口, 你可以传入一个指示器以及一个回调函数handler

    函数签名

    1. declare const useApi: <C extends ContextData>(params: {
    2. instruct?: HttpInstructReturn | HttpInstructReturn[] | undefined;
    3. handler: HttpApiHandler<C>;
    4. }) => HttpApiReturn<C>;

    栗子🌰

    ```typescript import { useApi } from ‘@swordjs/sword-framework’; import { ReqQuery, ReqParams, Res } from ‘./proto’;

export const main = useApi<{ query: ReqQuery; params: ReqParams; res: Res; }>({ handler: (ctx) => { return { message: ‘hello’ }; } });

  1. > ps: useApi的更多demo你可以在[指示器](https://www.yuque.com/mlgrgm/lrf0ra/hr8g0g)中查阅到
  2. <a name="PZx1K"></a>
  3. ## useApp
  4. - 用户定义sword程序的初始化函数, useApp在内部会执行几个关键流程且返回一个app对象, 在对象中我们可以调用_start_, _implementApi等函数_
  5. <a name="a9OX2"></a>
  6. ### 函数签名
  7. ```typescript
  8. declare type AppReturn = {
  9. implementApi: () => Promise<void>;
  10. server: {
  11. start: () => void;
  12. };
  13. };
  14. declare const useApp: () => Promise<AppReturn>;

栗子🌰

  1. import { useApp } from '@swordjs/sword-framework';
  2. const init = async () => {
  3. const app = await useApp();
  4. await app.implementApi();
  5. // 启动服务器
  6. app.server.start();
  7. };
  8. init();

usePipeline

  • 初始化pipeline管道的函数, 在返回的对象可以实现: 添加事件回调到指定管道中

    函数签名

    1. declare const usePipeline: <T extends HttpContext<ContextData> = HttpContext<ContextData>>() => (type: PipelineTypeKeys, cb: PipelineNode<T>) => void;

    栗子🌰

    ```typescript import { usePipeline } from ‘@swordjs/sword-framework’;

const pipeline = usePipeline()

// node1 pipeline(‘preApiCall’, (ctx) => { ctx.return = { data: { success: true } } return ctx; })

// node2 pipeline(‘preApiCall’, (ctx) => { return null; })

// node3 pipeline(‘preApiCall’, (ctx) => { return null; })

  1. > ps: usePipeline的更多demo你可以在[中间件](https://www.yuque.com/mlgrgm/lrf0ra/rz7wx1)中查阅到
  2. <a name="FlRp9"></a>
  3. ## usePlugin
  4. - 使用插件, 返回的对象可以实现添加插件的功能
  5. <a name="Ym7pX"></a>
  6. ### 函数签名
  7. ```typescript
  8. declare const usePlugin: () => {
  9. add: (plugin: Plugin | (() => Plugin)) => Plugin[];
  10. };

栗子🌰

  1. import { useApp, usePlugin } from '@swordjs/sword-framework';
  2. const plugin = usePlugin();
  3. plugin.add(一个插件对象);

ps: usePlugin的更多demo你可以在插件系统中查阅到

useGetApiMap

  • 用于sword中运行时所需要的抽象方法, 获取当前应用程序的api map树

    函数签名

    1. declare const useGetApiMap: (params?: {
    2. dir?: string | undefined;
    3. apiDir?: string | undefined;
    4. apiPath?: string | undefined;
    5. } | undefined) => Promise<{
    6. apiMap: Record<string, Map>;
    7. }>;

    栗子🌰

    ```typescript import { useGetApiMap } from ‘@swordjse/sword-framework’;

const { apiMap } = await useGetApiMap()

  1. <a name="NYsxI"></a>
  2. ## usePlatform
  3. - 获取当前运行时环境
  4. <a name="XSGnt"></a>
  5. ### 函数签名
  6. ```typescript
  7. type CommandConfig = {
  8. platform: 'server' | 'unicloud';
  9. };
  10. declare const usePlatform: () => CommandConfig['platform'];

栗子🌰

  1. const platform = usePlatform()
  2. // platform 此时就是运行时环境, 你可以在代码中编写多平台的代码

usePlatformHook

  • 我们在编写多平台的代码时, 会有大量的判断运行时环境, 所以这个hook将帮助你写出更优雅的代码, 我们只需要传给这个函数对应的回调, 它就可以在对应平台之上执行对应的回调

    函数签名

    1. declare const usePlatformHook: <R = any>(params: Partial<Record<"server" | "unicloud", () => R | Promise<R>>>, platform?: "server" | "unicloud") => Promise<R | undefined>;

    栗子🌰

    1. await usePlatformHook({
    2. server: () => {
    3. },
    4. unicloud: () => {
    5. }
    6. })

    ps: 我们也可以传递函数的的第二个参数, 即强指定当前运行时环境, 而不是函数默认获取