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) => void
for this field and do some error handler
-
req: Request
Request object -
res: Response
Response objectalso fields inherit from aliyun runtime context
-
credentials: AliyunContextCredentials
-
service: AliyunContextService
-
requestId: string
-
accountId: string
-
function: AliyunContextFunction
-
region: string
and 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" }
*/