This lib only works when using http-trigger
By using this wrapper you shall write your handler function in a koa-like way.
Typescript friendly.
wrapper(handler: (ctx: WrappedContext, options?: WrapperOptions) => void) => void
The original request, response, context object will be merged into a more powerful WrappedContext object and passed into handler function.
-
timeout:set a timeout (ms) to limit the time range running handler -
onError:you can set a callback like(err:Error, ctx: WrappedContext) => voidfor this field and do some error handler
-
req: RequestRequest object -
res: ResponseResponse objectalso fields inherit from aliyun runtime context
-
credentials: AliyunContextCredentials -
service: AliyunContextService -
requestId: string -
accountId: string -
function: AliyunContextFunction -
region: stringand short hands for ctx.res
-
setHeader(field: string, value: string): void -
removeHeader(field: string): void -
get header: Headers -
get headers: Headers -
get status: number -
set status(code: number): void -
get body: any -
set body(value: any): void
see request.ts
see response.ts
Simply set the context's body, it will automatically send the response with proper status and header
const { wrapper } = require("aliyun-serverless-wrapper")
exports.someFunction = wrapper(async (ctx) => {
ctx.body = { hello: "world" }
})
/* response shall be
HTTP/1.1 200 OK
Content-Type: application/json
{ "hello": "world" }
*/
exports.someFunction = wrapper(async (ctx) => {
ctx.body = "hello world"
})
/* response shall be
HTTP/1.1 200 OK
Content-Type: text/plain
"hello world"
*/
exports.someFunction = wrapper(async (ctx) => {
ctx.body = "<html><h1>hello wordl</h1></html>"
})
/* response shall be
HTTP/1.1 200 OK
Content-Type: text/html
"<html><h1>hello wordl</h1></html>"
*/Or throw Error
exports.someFunction = wrapper(async (ctx) => {
throw new Error("oops")
})
/* response shall be
HTTP/1.1 500 Internal Error
*/
exports.someFunction = wrapper(
async (ctx) => {
await checkAuth(ctx.req) // and this will throw a Error
},
{
onError: (e, ctx) => {
ctx.status = 401
ctx.body = { errorMessage: e.message }
}
}
)
/* response shall be
HTTP/1.1 404 Not Found
Content-Type: application/json
{ "errorMessage": "Not Authorized" }
*/