Skip to main content
Version: 3.0.0

Hooks

Midway Hooks 可以通过使用 Hooks 函数来获取运行时上下文。

语法

Hooks 需要在 Api 接口中使用。

有效的例子:

import {
Api,
Get,
useContext,
} from '@midwayjs/hooks';
import { Context } from '@midwayjs/koa';

export default Api(Get(), async () => {
const ctx = useContext<Context>();
console.log(ctx.method);
// ...
});

无效例子:

import { useContext } from '@midwayjs/hooks';

const ctx = useContext(); // will throw error

支持的 Hooks

useContext

useContext() 函数将返回本次请求相关的上下文,返回的 Context 与底层使用的框架决定。

以使用 Koa 框架为例,那么 useContext 将返回 Koa 的 Context 对象。

以获取请求 Method 和 Path 为例。

import {
Api,
Get,
useContext,
} from '@midwayjs/hooks';
import { Context } from '@midwayjs/koa';

export default Api(Get(), async () => {
const ctx = useContext<Context>();
return {
method: ctx.method,
path: ctx.path,
};
});

你可以通过泛型来标注当前上下文的类型。

// Koa
import { Context } from '@midwayjs/koa';
const ctx = useContext<Context>();

// FaaS
import { Context } from '@midwayjs/faas';
const ctx = useContext<Context>();

创建可复用的 Hooks

你可以创建可复用的 Hooks,以便在多个接口中使用。

import {
Api,
Get,
useContext,
} from '@midwayjs/hooks';
import { Context } from '@midwayjs/koa';

function useIp() {
const ctx = useContext<Context>();
return ctx.ip;
}

export default Api(Get(), async () => {
const ip = useIp();
return {
ip,
};
});

一体化调用:

import getIp from './api';
const { ip } = await getIp();
console.log(ip); // 127.0.0.1