Skip to content

Instantly share code, notes, and snippets.

@bmorrisondev
Created August 18, 2020 20:14
Show Gist options
  • Select an option

  • Save bmorrisondev/0c46dabcb64f1fa82794003c1d2de202 to your computer and use it in GitHub Desktop.

Select an option

Save bmorrisondev/0c46dabcb64f1fa82794003c1d2de202 to your computer and use it in GitHub Desktop.
Lambda Adapter w/Examples
const { adapter } = require('./lambdaAdapter')
exports.handler = async (event, context) => await adapter(event, context, options)
const { adapter } = require('./lambdaAdapter')
// This post method will override the post in lambdaAdapter
const post = async function (event, context) {
let response = {};
try {
let obj = JSON.parse(event.body);
let savedObj = someCustomWayToSaveYourObjectHere(obj)
response = {
statusCode: 201,
body: JSON.stringify(savedObj)
};
} catch (err) {
console.error(err);
response = {
statusCode: 500,
body: err.toString()
};
}
return response;
};
let options = {
routes: {
post
}
}
exports.handler = async (event, context) => await adapter(event, context, options)
const get = async function (event, context) {
let response;
try {
if (!event.queryStringParameters || !event.queryStringParameters.id) {
let objs = await listYourObjectsHere();
response = {
statusCode: 200,
body: JSON.stringify(objs)
};
} else {
let obj = await getYourObjectHere(event.queryStringParameters.id);
if(!obj || !obj.id) {
response = {
statusCode: 404
}
} else {
response = {
statusCode: 200,
body: JSON.stringify(obj)
};
}
}
} catch (err) {
console.error(err);
response = {
statusCode: 500,
body: err.toString()
};
}
return response;
};
const post = async function (event, context) {
let response = {};
try {
let obj = JSON.parse(event.body);
let savedObj = await saveYourObjectHere(obj)
response = {
statusCode: 201,
body: JSON.stringify(savedObj)
};
} catch (err) {
console.error(err);
response = {
statusCode: 500,
body: err.toString()
};
}
return response;
};
const put = async function (event, context) {
if (!event.queryStringParameters || !event.queryStringParameters.id) {
return {
statusCode: 400,
body: "'id' query parameter is required"
};
}
let response;
let obj = JSON.parse(event.body);
try {
let updated = await updateYourObjectHere(
event.queryStringParameters.id,
obj
);
response = {
statusCode: 200,
body: JSON.stringify(updated)
};
} catch (err) {
console.error(err);
response = {
statusCode: 500,
body: err.toString()
};
}
return response;
};
const del = async function (event, context) {
if (!event.queryStringParameters || !event.queryStringParameters.id) {
return {
statusCode: 400,
body: "'id' query parameter is required"
};
}
let response;
try {
await deleteYourObjectHere(
event.queryStringParameters.id
);
response = {
statusCode: 200
};
} catch (err) {
console.error(err);
response = {
statusCode: 500,
body: err.toString()
};
}
return response;
}
const _routes = {
get,
post,
put,
delete: del
};
exports.adapter = async function (event, context, options) {
let response = {};
try {
if(options.routes) {
Object.keys(options.routes).forEach(r => {
_routes[r] = options.routes[r]
})
}
if (_routes[event.httpMethod.toLowerCase()]) {
response = await _routes[event.httpMethod.toLowerCase()](event, context);
} else {
response = {
statusCode: 404
};
}
if(!response.headers) {
response.headers = {
'Access-Control-Allow-Origin': '*'
}
} else {
response.headers['Access-Control-Allow-Origin'] = '*'
}
return response;
} catch (err) {
console.error(err)
return {
statusCode: 500,
body: err.toString()
};
}
};
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment