Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save kenanhancer/ba63562d3171fe3fa4aa021df2663c3e to your computer and use it in GitHub Desktop.
Save kenanhancer/ba63562d3171fe3fa4aa021df2663c3e to your computer and use it in GitHub Desktop.
SimpleHttpServerWithPipelineDemo1 created by kenanhancer - https://repl.it/@kenanhancer/SimpleHttpServerWithPipelineDemo1
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