Skip to content

Instantly share code, notes, and snippets.

View 5t33's full-sized avatar

Steven Staley 5t33

View GitHub Profile
service: lambda-api-demo
plugins:
- serverless-offline
provider:
name: aws
runtime: nodejs12.x
stage: ${opt:stage}
region: us-east-2
const Logger = require('./logger');
const { handleError, handleResp, ApiError } = require('./utils');
const {
functionThatRejects,
functionThatResolves,
functionThatRejectsWith400
} = require('./anotherFile');
const logger = Logger("info");
const pino = require("pino");
module.exports = (level) => {
return pino({
level,
name: process.env.FUNC_NAME,
});
};
class ApiError extends Error {
statusCode;
body;
constructor(statusCode, body) {
super();
if(Array.isArray(body)) {
this.body = {
Errors: body
}
} else {
const { ApiError } = require('./utils');
module.exports.functionThatRejectsWith400 = () => Promise.reject(
new ApiError(400, [
"wow you messed up, huh?",
"Looks like somebody didn't read the documentation."
])
)
module.exports.functionThatRejects = () => Promise.reject(new Error("Oh No"))
module.exports.handleError = (logger, error ) => {
if (error instanceof ApiError) {
const response = formatApiError(error);
return Promise.resolve(response)
} else {
logger.error("Internal Server Error: ", error);
const response = formatApiError(new ApiError(500, "Internal Server Error"));
return Promise.reject(error);
}
};
functions:
DemoLambda:
role: DemoLambdaRole
handler: index.handler
integration: lambda
events:
- http:
path: /health_check
method: get
integration: lambda
const Logger = require('./logger');
const { handleError, handleResp, ApiError } = require('./utils');
const { functionThatRejects, functionThatResolves, functionThatRejectsWith400 } = require('./anotherFile');
const logger = Logger("trace");
module.exports.handler = async ( event, context) => {
const log = logger.child({
requestId: context.awsRequestId,
});
const formatApiError = (error) => JSON.stringify({
isBase64Encoded: false,
statusCode: error.statusCode,
headers: {
"Content-Type": typeof error.body === "string" ? "text/html" : "application/json",
},
body: error.body
});
module.exports.handleError = (logger, error ) => {
if (error instanceof ApiError) {
const response = formatApiError(error);
return Promise.reject(response)
} else {
logger.error("Internal Server Error: ", error);
const response = formatApiError(new ApiError(500, "Internal Server Error"));
return Promise.reject(response);
}
};