46 lines
1.3 KiB
TypeScript
46 lines
1.3 KiB
TypeScript
import {inject} from '@loopback/core';
|
|
import {
|
|
FindRoute,
|
|
InvokeMethod,
|
|
InvokeMiddleware,
|
|
ParseParams,
|
|
Reject,
|
|
RequestContext,
|
|
RestBindings,
|
|
Send,
|
|
SequenceHandler,
|
|
} from '@loopback/rest';
|
|
|
|
const SequenceActions = RestBindings.SequenceActions;
|
|
|
|
export class MySequence implements SequenceHandler {
|
|
/**
|
|
* Optional invoker for registered middleware in a chain.
|
|
* To be injected via SequenceActions.INVOKE_MIDDLEWARE.
|
|
*/
|
|
@inject(SequenceActions.INVOKE_MIDDLEWARE, {optional: true})
|
|
protected invokeMiddleware: InvokeMiddleware = () => false;
|
|
|
|
constructor(
|
|
@inject(SequenceActions.FIND_ROUTE) protected findRoute: FindRoute,
|
|
@inject(SequenceActions.PARSE_PARAMS) protected parseParams: ParseParams,
|
|
@inject(SequenceActions.INVOKE_METHOD) protected invoke: InvokeMethod,
|
|
@inject(SequenceActions.SEND) public send: Send,
|
|
@inject(SequenceActions.REJECT) public reject: Reject,
|
|
) {}
|
|
|
|
async handle(context: RequestContext) {
|
|
try {
|
|
const {request, response} = context;
|
|
const finished = await this.invokeMiddleware(context);
|
|
if (finished) return;
|
|
const route = this.findRoute(request);
|
|
const args = await this.parseParams(request, route);
|
|
const result = await this.invoke(route, args);
|
|
this.send(response, result);
|
|
} catch (err) {
|
|
this.reject(context, err);
|
|
}
|
|
}
|
|
}
|