Aller au contenu principal
Version: 2.0.0

API 网关

API 网关在阿里云函数体系中比较特殊,他类似于创建一个无触发器函数,通过平台网关的绑定到特定的路径上。

使用方式

import { Provide, Inject, ServerlessTrigger, ServerlessTriggerType } from '@midwayjs/decorator';
import { Context } from '@midwayjs/faas';

@Provide()
export class HelloAliyunService {
@Inject()
ctx: Context;

@ServerlessTrigger(ServerlessTriggerType.API_GATEWAY, {
path: '/api_gateway_aliyun',
method: 'post',
})
async handleAPIGatewayEvent(@Body() name) {
return `hello ${name}`;
}
}

npm run deploy 后,参考阿里云文档配置即可。

info

当前 API 网关线上的路由在平台进行配置。

本地测试

和 HTTP 测试相同,通过 createFunctionApp 创建函数 app,通过 createHttpRequest 方式进行测试。

import { Framework } from '@midwayjs/serverless-app';
import { createInitializeContext } from '@midwayjs/serverless-fc-trigger';
import { createFunctionApp, createHttpRequest } from '@midwayjs/mock';

describe('test/hello_aliyun.test.ts', () => {
let app: Application;
let instance: HelloAliyunService;

beforeAll(async () => {
// create app
app = await createFunctionApp<Framework>(join(__dirname, '../'), {
initContext: createInitializeContext(),
});
});

afterAll(async () => {
await close(app);
});

it('should get result from http trigger', async () => {
const result = await createHttpRequest(app).post('api_gateway_aliyun').send({
name: 'zhangting',
});

expect(result.text).toEqual('hello zhangting');
});
});