@incdevco/framework
Version:
node.js lambda framework
100 lines (51 loc) • 1.69 kB
JavaScript
var Util = require('util');
var Promise = require('bluebird');
var Base = require('../index');
function Lambda(config) {
config = config || {};
Base.call(this, config);
this.handlers = config.handlers || {};
}
Util.inherits(Lambda, Base);
Lambda.prototype.handler = function (event, context, callback) {
var count = 0, promise = Promise.resolve(true), self = this;
this.log('original-event', JSON.stringify(event, null, 2));
event.Records.forEach(function (record, index) {
promise = promise.then(function () {
count++;
return self.handleRecord(event, context, record)
.catch(function (exception) {
exception.recordIndex = index;
throw exception;
});
});
});
promise
.then(function () {
callback(null, count);
})
.catch(function (exception) {
callback(exception);
});
};
Lambda.prototype.handleRecord = function (event, context, record) {
var self = this;
return Promise.try(function () {
var action;
try {
action = JSON.parse(record.Sns.Message);
} catch (e) {
self.log('not valid action message', record.Sns.Message);
return false;
}
action.id = record.Sns.MessageId;
if (self.handlers[action.name]) {
self.log('handler found', action.name);
return self.handlers[action.name](event, context, action);
} else {
self.log('no handler found', action.name);
}
return false;
});
};
module.exports = Lambda;