http-micro
Version:
Micro-framework on top of node's http module
76 lines (75 loc) • 2.52 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
const http = require("http");
const https = require("https");
const utils = require("./utils");
const context_1 = require("./context");
const server_utils_1 = require("./server-utils");
class Application {
constructor(_contextFactory, _errorHandler = utils.defaultErrorHandler, _fallbackHandler = utils.defaultFallbackNotFoundHandler) {
this._contextFactory = _contextFactory;
this._errorHandler = _errorHandler;
this._fallbackHandler = _fallbackHandler;
this.middlewares = [];
}
createServer(secureOpts) {
let isHttps = secureOpts ? true : false;
const server = isHttps ?
https.createServer(secureOpts, this.createHandler()) :
http.createServer(this.createHandler());
return server_utils_1.attachServerExtensions(server);
}
createHandler() {
const fn = utils.compose(...this.middlewares);
return (req, res) => {
let errorHandler = this._errorHandler || utils.defaultErrorHandler;
let fallbackHandler = this._fallbackHandler || utils.defaultFallbackNotFoundHandler;
let context = null;
try {
context = this._contextFactory(this, req, res);
fn(context, () => fallbackHandler(context, null))
.catch((err) => errorHandler(err, req, res, context));
}
catch (err) {
errorHandler(err, req, res, context);
}
};
}
use(...middleware) {
if (!this.middlewares)
this.middlewares = [];
utils.addMiddlewares(middleware, this.middlewares);
return this;
}
setErrorHandler(handler) {
this._errorHandler = handler;
}
setFallbackHandler(handler) {
this._fallbackHandler = handler;
}
getItem(key) {
if (this.items) {
return this.items.get(key);
}
return null;
}
setItem(key, value) {
if (!this.items) {
this.items = new Map();
}
this.items.set(key, value);
}
hasItem(key) {
if (this.items) {
return this.items.has(key);
}
return false;
}
}
exports.Application = Application;
class App extends Application {
constructor() {
super(context_1.contextFactory);
}
}
exports.App = App;