rjweb-server
Version:
Easy and Robust Way to create a Web Server with Many Easy-to-use Features in NodeJS
101 lines (100 loc) • 2.66 kB
JavaScript
class Base {
/**
* Initializes a new Instance of a Web Context
* @since 7.0.0
*/
constructor(controller, localContext) {
/**
* Context Variables that are available everywhere in the requests lifespan
* @since 1.2.1
*/
this["@"] = {};
this.ctx = localContext;
this.ctg = controller["globalContext"];
this.controller = controller;
this.headers = localContext.headers;
this.cookies = localContext.cookies;
this.params = localContext.params;
this.queries = localContext.queries;
this.fragments = localContext.fragments;
this.headers["modifyFn"] = (event, key, data) => {
switch (event) {
case "set": {
localContext.response.headers[key] = data;
return;
}
case "delete": {
localContext.response.headers[key] = void 0;
return;
}
case "clear": {
let keys = 0;
for (const cKey in localContext.response.headers) {
if (!key.includes(cKey)) {
localContext.response.headers[key] = void 0;
keys++;
}
}
return keys;
}
}
};
this.cookies["modifyFn"] = (event, key, data) => {
switch (event) {
case "set": {
localContext.response.cookies[key] = data;
return;
}
case "delete": {
localContext.response.cookies[key] = {
value: "r",
maxAge: 0
};
return;
}
case "clear": {
let keys = 0;
for (const [cKey] of localContext.cookies) {
if (!key.includes(cKey)) {
localContext.response.cookies[cKey] = {
value: "r",
maxAge: 0
};
keys++;
}
}
return keys;
}
}
};
let hostIp;
if (this.ctx.isProxy && this.ctx.headers.has(this.ctg.options.proxy.header))
hostIp = this.ctx.headers.get(this.ctg.options.proxy.header, "").split(",")[0].trim();
else
hostIp = this.ctx.remoteAddress.split(":")[0];
this.client = {
userAgent: localContext.headers.get("user-agent", ""),
port: parseInt(localContext.remoteAddress.split(":")[1]),
ip: hostIp
};
this.url = localContext.url;
this.domain = localContext.headers.get("host", "");
}
/**
* Set a Custom Variable
* @example
* ```
* ctr.setCustom('hello', 123)
*
* ctr["@"].hello // 123
* ```
* @since 1.2.1
*/
setCustom(name, value) {
this["@"][name] = value;
return this;
}
}
export {
Base as default
};