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
throwhttpError()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,afterHooksall 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 .
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Java常用算法手册
2012-5 / 59.00元
《Java常用算法手册》分三篇,共13章,分别介绍了算法基础、算法应用和算法面试题。首先介绍了算法概述,然后重点分析了数据结构和基本算法思想;接着,详细讲解了算法在排序、查找、数学计算、数论、历史趣题、游戏、密码学等领域中的应用;最后,列举了算法的一些常见面试题。书中知识点覆盖全面,结构安排紧凑,讲解详细,实例丰富。全书对每一个知识点都给出了相应的算法及应用实例,虽然这些例子都是以Java语言来编......一起来看看 《Java常用算法手册》 这本书的介绍吧!
HTML 压缩/解压工具
在线压缩/解压 HTML 代码
Markdown 在线编辑器
Markdown 在线编辑器