Skip to content

Instantly share code, notes, and snippets.

@wheresrhys
Last active November 8, 2017 23:23
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save wheresrhys/6e78dd7b5fb3fa61cdeac05461173b98 to your computer and use it in GitHub Desktop.
Save wheresrhys/6e78dd7b5fb3fa61cdeac05461173b98 to your computer and use it in GitHub Desktop.
reckie
Transform handlers compatible with express, lambda etc to each other
e.g.
reckie.lambdaToExpress = handler => {
return (req, res) => {
const event = eventFromRequest(req);
const callback = callbackFromResponse(res);
handler(event, null, callback);
}
}
const request = require('express').request;
function requestFromEvent (event) {
return {
// build a fake/real request object using data from the event
});
}
const response = require('express').response;
function responseFromCallback (callback) {
return {
// set equivalents for all res methods, some of which set various props, some call callback
// alternatively, create a real response object, but overwrite some methods to use callback rather than http.send
};
}
reckie.expressToLambda = handler => {
return (event, context, callback) => {
const req = requestFromEvent(event);
const res = responseFromCallback(callback);
handler(req, res)
}
}
serverless.helloWorld = reckie.expressToLambda((req, res) => {
res.send({hello: 'world'});
})
express.get('/hello', reckie.lambdaToExpress((event, context, callback) => {
callback(null, {body:{hello: 'world'}});
})
// problem is what about middleware
serverlexpress(app)
// does job similar to supertest (nned to look into how that works)
// sets up the app with all middleware and so forth
// but doesn't bind to port
// So in lambda we define
const app = serverlexpress(app);
handlers.hello = app;
handlers.goodbye = app;
// alternative names
// lambdexpress exless exl
@wheresrhys
Copy link
Author

Test.prototype.end = function(fn) {
  var self = this;
  var server = this._server;
  var end = Request.prototype.end;

  end.call(this, function(err, res) {
    if (server && server._handle) return server.close(assert);

    assert();

    function assert() {
      self.assert(err, res, fn);
    }
  });

  return this;
this._server = app.listen(0);

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