阿里云的 HTTP 触发器和其他平台的有所区别,是独立于 API 网关的另一套服务于 HTTP 场景的触发器。相比于 API 网关,该触发器更易于使用和配置。
单接口配置
在 f.yml 中配置函数,同时配置触发器类型。
service:name: midway-faas-examplesprovider:name: aliyunfunctions:httpGetTrigger:handler: index.getevents:- http:method: get ## 配置请求方法path: /api ## 配置请求路径
对应代码如下。
import { Func, Inject, Provide } from '@midwayjs/decorator';import { FaaSContext } from '@midwayjs/faas';@Provide()export class APIService {@Inject()ctx: FaaSContext; // context@Func('index.get')async get() {return this.ctx.method;}}
发布完成后,平台状态如下。

也可以配置多个 method,如果不写,默认为 all
service:name: midway-faas-examplesprovider:name: aliyunfunctions:httpGetTrigger:handler: index.getevents:- http:method:- get- post ## 配置多种请求方法path: /api ## 配置请求路径httpDefaultTrigger:handler: index.postevents:- http:path: /* ## 不写 method ,默认为 all
多接口配置
如果需要配置多个不同接口,可以增加不同的函数,比如以下的示例表示配置了 5 个单独 method 的函数以及 1 个支持全 method 的函数:
service:name: midway-faas-examplesprovider:name: aliyunfunctions:httpGetTrigger:handler: index.getevents:- http:method: getpath: /httpPostTrigger:handler: index.postevents:- http:method: postpath: /httpPutTrigger:handler: index.putevents:- http:method: putpath: /httpDeleteTrigger:handler: index.delevents:- http:method: deletepath: /httpHeadTrigger:handler: index.headevents:- http:method: headpath: /httpAllTrigger:handler: index.allevents:- http:method: any ## 表示支持所有 methodpath: /api
:::info method 为空时,默认为 any,即为 ‘GET’, ‘PUT’, ‘POST’, ‘DELETE’, ‘HEAD’ 所有类型。 :::
在 midway faas 的体系中,我们可以将多个函数写到同一个类中,代码如下,每个使用 @Func 修饰的方法都可以作为一个单一函数来访问:
import { Func, Inject, Provide } from '@midwayjs/decorator';import { FaaSContext } from '@midwayjs/faas';@Provide()export class APIService {@Inject()ctx: FaaSContext;@Func('index.get')async get() {return this.ctx.method;}@Func('index.post')async post() {return this.ctx.method;}@Func('index.put')async put() {return this.ctx.method;}@Func('index.del')async del() {return this.ctx.method;}@Func('index.head')async head() {return this.ctx.method;}@Func('index.all')async all() {return this.ctx.method;}}
发布效果,每个配置的函数都将发布成一个平台上的函数,并且自动配置 http 触发器:

HTTP Context API
Midway faas 在 http 场景下,将代码写法进行了简化,并向传统 koa 写法保持尽可能一致。
@Provide()export class APIService {@Inject()ctx: FaaSContext;@Func('index.get')async get() {const query = this.ctx.query;const url = this.ctx.path;const method = this.ctx.method;// 等价于 this.ctx.body = 'hello world'; 两者都支持return 'hello world';}@Func('index.post')async post() {const body = this.ctx.request.body;return this.ctx.method; // POST}}
:::info 直接 return 的内容,会被自动挂载到 ctx.body 中。 :::
详细文档,请访问函数上下文。
自定义域名
你需要提前申请一个域名,在国内的话,需要备案,否则无法绑定。
添加域名解析到你函数对应网关。
在函数页面绑定自定义域名,添加路由
绑定完成后,即可用域名访问。
