Skip to content

Instantly share code, notes, and snippets.

@mgttt
Created November 29, 2019 06:09
Show Gist options
  • Save mgttt/c44d6b7513ce821046da4462805c9214 to your computer and use it in GitHub Desktop.
Save mgttt/c44d6b7513ce821046da4462805c9214 to your computer and use it in GitHub Desktop.
tiny framework for aws lambda
const Application = require('./Application')();
var { s2o, o2s, o2o, tryRequire, flag_production, approot } = Application;
//var Access_Control_Allow_Headers = (h)=>{ var rt=['origin', 'content-type','accept']; for(var k in h){rt.push(k)}; return rt; };
var Access_Control_Allow_Headers = (h)=> ['origin', 'content-type','accept'].concat( Object.keys(h)||[] );
var loadtime_handler_aws = new Date();
module.exports = async(event, context) => {
try {
var statusCode = 200;
var { queryStringParameters, httpMethod, body, path, requestContext} = event || {};
var headers = {
'Access-Control-Allow-Origin': '*',
'Access-Control-Allow-Headers':Access_Control_Allow_Headers(event.headers).join(','),
'Access-Control-Allow-Methods':'GET,POST',
"Access-Control-Allow-Credentials": "true",
"Access-Control-Max-Age": 1728000,
};
if(httpMethod=='GET'||httpMethod=='POST'||httpMethod==null){
}else{ throw new Error(`NOT ALLOW method ${httpMethod}`); }
var body_raw = body;
var post_o = s2o(body_raw) || {};
var get_o = queryStringParameters || {};
var request_o = o2o(get_o, post_o);
var { c, m } = request_o || {};
var mm;
if (path) {
var u, mmm;
if (mmm = path.match(/.*\/([a-zA-Z0-9_]*)\.([a-zA-Z0-9_]+)(\.api)?$/)) // [C.M,.M,C.M.api,.M.api]
{ [u, c, m] = mmm; }
else if (mmm = path.match(/.*\/([a-zA-Z0-9_]+)(\.api)?$/))// [M,M.api]
{ [u, m] = mmm; }
mm = m;
}
//else if (requestContext) mm = 'HandleWebSocket';
else { c = 'Default', mm = 'GetVersion' };//when w- path
if (!c) c = 'Default'; //to ApiDefault
if (!mm) mm = 'Index'; //to .Index
if (c.substr(0, 3) != "Api") c = "Api" + c;
var req = {
loadtime_handler_aws,
time_req:new Date(),
request_o,
post_o,
get_o,
event,
body_raw,
region: process.env.AWS_REGION
//@ref http://docs.aws.amazon.com/lambda/latest/dg/current-supported-versions.html#lambda-environment-variables
}, res = { headers };
var cc;
var _logicModule = tryRequire(approot + '/' + c, !flag_production);
if (_logicModule) cc = new _logicModule(Application, /*Server=*/{ req, res, c, m });
if(cc&&cc[mm]){
var rst = await cc[mm](request_o);
}else{
rst = (`404 ${path} ${c}.${mm} ${httpMethod}`);
}
if('string'==typeof rst){
body = rst;
headers['content-type'] = 'text/html';
}else{
body = o2s(rst);
}
}
catch (err) {
body = '500 '+err;
}
return { statusCode, body, headers };
}
@mgttt
Copy link
Author

mgttt commented Nov 29, 2019

exports.handler = require('./handler_aws');

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment