Created
April 8, 2018 15:17
-
-
Save kenanhancer/ba63562d3171fe3fa4aa021df2663c3e to your computer and use it in GitHub Desktop.
SimpleHttpServerWithPipelineDemo1 created by kenanhancer - https://repl.it/@kenanhancer/SimpleHttpServerWithPipelineDemo1
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 http = require('http'); | |
class PipelineBuilder { | |
static build(functions, index = 0) { | |
if (functions.length == index) return sett => {}; | |
let aggregateFunc = settings => | |
functions[index](settings, PipelineBuilder.build(functions, index + 1)); | |
return aggregateFunc; | |
} | |
} | |
class SimpleHttpServer { | |
constructor(port) { | |
this.port = port; | |
this.settings = {}; | |
this.requestHandlers = []; | |
this.httpRequestPipelineHandler = null; | |
} | |
use(requestHandler) { | |
this.requestHandlers.push(requestHandler); | |
} | |
useSetting(key, value) { | |
this.settings[key] = value; | |
} | |
start() { | |
this.httpRequestPipelineHandler = PipelineBuilder.build( | |
this.requestHandlers | |
); | |
http | |
.createServer( | |
function(req, res) { | |
let env = this.settings; | |
env.req = req; | |
env.res = res; | |
this.httpRequestPipelineHandler(env); | |
res.end(); //end the response | |
}.bind(this) | |
) | |
.listen(this.port); //the server object listens on port 8080 | |
} | |
} | |
const httpServer = new SimpleHttpServer(8080); | |
httpServer.useSetting('Routes', { | |
Default: '/{controller}/{action}', | |
Route1: '/{controller}/{action}/{id}', | |
Route2: '/{controller}/{action}/{name}/{id}' | |
}); | |
httpServer.use((env, next) => { | |
env.res.write("<p style='color:red'>Middleware1 executed</p>"); //write a response to the client | |
env.res.write( | |
'<p>Routes coming from initial settings</p>' + JSON.stringify(env.Routes) | |
); //write a response to the client | |
env.sessionKey = 'TestSession'; | |
next(env); | |
}); | |
httpServer.use((env, next) => { | |
env.res.write("<p style='color:red'>Middleware2 executed</p>"); //write a response to the client | |
env.res.write('<p>sessionKey coming from Middleware1</p>', env.sessionKey); //write a response to the client | |
env.IsSessionValid = true; | |
next(env); | |
}); | |
httpServer.use((env, next) => { | |
env.res.write("<p style='color:red'>Middleware3 executed</p>"); //write a response to the client | |
if (env.IsSessionValid) { | |
env.res.write('<p>Session is valid</p>'); //write a response to the client | |
} | |
//next(env); | |
}); | |
httpServer.start(); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment