Created
August 18, 2020 20:14
-
-
Save bmorrisondev/0c46dabcb64f1fa82794003c1d2de202 to your computer and use it in GitHub Desktop.
Lambda Adapter w/Examples
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| const { adapter } = require('./lambdaAdapter') | |
| exports.handler = async (event, context) => await adapter(event, context, options) |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| 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) |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| 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