像 @Header
、 @Query
和 @Body
等等之所以能将请求的属性注入到控制器的方法参数上,全靠方法参数解释器。
定义
export interface MethodArgsResolver {
readonly priority: number;
resolve(metadata: any, args: any[]): Promise<void>;
}
实现
@Component(MethodArgsResolver)
export class QueryMethodArgsResolver implements MethodArgsResolver {
readonly priority = 400;
async resolve(metadata: any, args: any[]): Promise<void> {
const query: any = Context.getCurrent().request.query;
const queryMetadatas = <QueryMetadata[]>metadata.queryMetadata;
if (queryMetadatas && query !== undefined) {
for (const m of queryMetadatas) {
args[m.parameterIndex] = m.name ? query[m.name] : query;
}
}
}
}