jai-server
Version:
Fast , simple and powerful web framework for creating REST APIs for your next project. RESTFul API server
52 lines (51 loc) • 1.94 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const next_1 = __importDefault(require("./next"));
const httpPrototype_1 = __importDefault(require("./request/httpPrototype"));
const addResponseProto_1 = __importDefault(require("./response/addResponseProto"));
const errorHandler_1 = require("./request/errorHandler");
function reqTimeout(req, res, timeout) {
let timeOutId = null;
res.clearSetTimeout = () => {
if (!timeout || !timeOutId)
return req.destroy();
clearTimeout(timeOutId);
};
if (!timeout)
return;
timeOutId = setTimeout(() => {
if (!res.headersSent) {
res.writeHead(408, { 'Content-Type': 'text/plain' });
res.end('Request Timeout');
timeOutId = null;
}
req.destroy();
}, timeout);
}
function RequestBuilder(config, router) {
return async function RequestHandler(req, res) {
try {
(0, httpPrototype_1.default)(req, config);
(0, addResponseProto_1.default)(res);
if (req.httpVersion === '2.0') {
const { headers } = req;
req.method = headers[':method'];
req.url = headers[':path'];
req.httpVersion = headers[':scheme'] === 'https' ? '2.0' : '1.1';
req.port = req.socket.localPort;
}
res.setHeader('X-Powered-By', 'JAI-SERVER');
reqTimeout(req, res, config.timeout || 0);
await (0, next_1.default)(req, res, 0, router.stack.length + 1, router.stack, '/')();
res.clearSetTimeout();
}
catch (e) {
(0, errorHandler_1.ErrorHandler500)(res, e);
res.clearSetTimeout();
}
};
}
exports.default = RequestBuilder;