Micro AWS Lambda
Intro
- Ready to go Lambda Proxy library
- Written in Typescript
- Zero runtime dependencies
- Tiny: 7KB after minified
- Extendable with middlewares
- before (handler) hooks
- after (handler) hooks
- early exit for just
throw
httpError()
or anything - pass values among middlewares
- Return response
- an object, it will be converted to a Lambda compatible response
- a customizable
httpResponse()
/success()
- a customizable
httpError()
/badRequest()
/internalError()
- or string, number, boolean
- Easy debug:
- Adding debug info to response object
- console.log event / context
Usage
1. Install
npm install micro-aws-lambda
2. Quick start
import { Middleware, lambdaWrapper } from 'micro-aws-lambda'; const lambda: Middleware = ({event, context, passDownObj}) => {} const handler = lambdaWrapper({ handler: lambda, beforeHooks: [], afterHooks: [], config: { addTraceInfoToResponse: false; logRequestInfo: false; } });
- The execution order is:
beforeHooks
->handler
->afterHooks
. -
beforeHooks
,handler
,afterHooks
all have the same signature:
type Middleware = ({ event, context, passDownObj, }: MiddlewareParams) => | string | number | boolean | PlainObject | APIGatewayProxyResult | Promise<PlainObject | APIGatewayProxyResult> | HttpError | HttpResponse | void;
event
and context
is immutable, if you want to pass any info down, attach it to the passDownObj
as a property, like passDownObj.value = { message: 'checked' }
, the passDownObj
object is mutable.
3. Simple handler
Writing an API which will return a JSON and logging things like APIGatewayID
and CloudWatchID
, blah blah
import { lambdaWrapper, Middleware } from 'micro-aws-lambda'; const lambda: Middleware = ({ event, context, passDownObj }) => { return { message: 'it works', }; }; const handler = lambdaWrapper({ handler: lambda, }); // call the API, you will get json response: {message: ""it works"}
4. Before hooks
What about I want to validate this request before executing my lambda? Easy, you just add a hook.
In the following case, if the request name is 'albert', only validateRequest
will be called.
import { badRequest } from 'micro-aws-lambda'; const validateRequest: Middleware = ({ event }) => { if (event.request.name === 'albert') { throw badRequest({ message: 'bad user, bye bye', }); } }; const handler = lambdaWrapper({ // adding to the array // omitting the other things for briefing beforeHooks: [validateRequest], });
5. After hooks
You can add afterHooks
as well for changing response. The following handler will only return { message: 'bad user, bye bye' }
Every middleware in the afterHooks
array will receive an additional response
as the response.
import { badRequest } from 'micro-aws-lambda'; const validateResponse: Middleware = ({ response }) => { if (response?.name === 'albert') { throw badRequest({ message: 'bad user, bye bye', }; }) }; const testHandler = lambdaWrapper({ handler: () => ({ name: 'albert', }), afterHooks: [validateResponse], });
6. Response
There are 2 types for response, httpError()
for throw
, and httpResponse()
for return
, each one of them has some shortcuts to use.
import { httpError, httpResponse } from 'micro-aws-lambda'; // It gives you an instance of HttpError, which extends from Error const error = httpError({ // default status code is 400 if not set statusCode: 401, body: { message: 'test', }, headers: { 'x-http-header': 'fake-header', }, }); // It gives you a plain JS object. const response = httpResponse({ // default status code is 200 if not set statusCode: 200, body: { message: 'test', }, headers: { 'x-http-header': 'fake-header', }, });
The commons headers are:
- 'Access-Control-Allow-Origin': '*',
- 'Access-Control-Allow-Credentials': true,
- 'Content-Type': 'application/json',
Supports multiValueHeaders
and isBase64Encoded
in case you need them.
6.1. Shortcuts
Compare to the above methods, the only difference is the shortcuts just sets the status code, you can still modify them if you want.
-
httpError
:badRequest() internalRequest()
-
httpResponse
:-
success()
: 200
-
7. Config
7.1 addTraceInfoToResponse
It will add debug info into the response object
{ debug: { endpoint: "", requestBody: "", requestMethod: "", country: "", lambdaRequestId: "", logStreamName: "", logGroupName: "", apiGatewayId: "" } }
7.2 logRequestInfo
It will console.log
:
event context Aws-Api-Gateway-Request-Id Identity-Source-Ip
8. Credits
This project was bootstrapped with TSDX .
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
算法导论(原书第3版)
Thomas H.Cormen、Charles E.Leiserson、Ronald L.Rivest、Clifford Stein / 殷建平、徐云、王刚、刘晓光、苏明、邹恒明、王宏志 / 机械工业出版社 / 2012-12 / 128.00元
在有关算法的书中,有一些叙述非常严谨,但不够全面;另一些涉及了大量的题材,但又缺乏严谨性。本书将严谨性和全面性融为一体,深入讨论各类算法,并着力使这些算法的设计和分析能为各个层次的读者接受。全书各章自成体系,可以作为独立的学习单元;算法以英语和伪代码的形式描述,具备初步程序设计经验的人就能看懂;说明和解释力求浅显易懂,不失深度和数学严谨性。 全书选材经典、内容丰富、结构合理、逻辑清晰,对本科......一起来看看 《算法导论(原书第3版)》 这本书的介绍吧!