Skip to content

Commit

Permalink
ok, brought some order to the galaxy
Browse files Browse the repository at this point in the history
  • Loading branch information
pxai committed Mar 27, 2018
1 parent 64f44a3 commit adb0bdf
Show file tree
Hide file tree
Showing 4 changed files with 139 additions and 36 deletions.
66 changes: 66 additions & 0 deletions log.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,66 @@
class Log {
constructor () {
this.colors = { Reset : "\x1b[0m",
Bright : "\x1b[1m",
Dim : "\x1b[2m",
Underscore : "\x1b[4m",
Blink : "\x1b[5m",
Reverse : "\x1b[7m",
Hidden : "\x1b[8m",

FgBlack : "\x1b[30m",
FgRed : "\x1b[31m",
FgGreen : "\x1b[32m",
FgYellow : "\x1b[33m",
FgBlue : "\x1b[34m",
FgMagenta : "\x1b[35m",
FgCyan : "\x1b[36m",
FgWhite : "\x1b[37m",

BgBlack : "\x1b[40m",
BgRed : "\x1b[41m",
BgGreen : "\x1b[42m",
BgYellow : "\x1b[43m",
BgBlue : "\x1b[44m",
BgMagenta : "\x1b[45m",
BgCyan : "\x1b[46m",
BgWhite : "\x1b[47m"
};

this.logcolor = `${this.colors.FgWhite}%s${this.colors.Reset}`;
this.infocolor = `${this.colors.FgCyan}%s${this.colors.Reset}`;
this.successcolor = `${this.colors.FgGreen}%s${this.colors.Reset}`;
this.warningcolor = `${this.colors.Bright}${this.colors.FgYellow}%s${this.colors.Reset}`;
this.errorcolor = `${this.colors.Bright}${this.colors.FgRed}%s${this.colors.Reset}`;
}

log (msg) {
console.log(this.logcolor, msg);
}

info (msg) {
console.log(this.infocolor, msg);
}

success (msg) {
console.log(this.successcolor, msg);
}

warn (msg) {
console.log(this.warningcolor, msg);
}

error (msg) {
console.log(this.errorcolor, msg);
}

byCode(msg, code) {
if (code === 404) {
this.error(msg);
} else {
this.success(msg);
}
}
}

module.exports = new Log();
47 changes: 12 additions & 35 deletions miniapi.js
Original file line number Diff line number Diff line change
@@ -1,8 +1,9 @@
const http = require('http');
const requestHandler = require('./requestHandler');
const log = require('./log');

let data = [{ id: 1, name: 'Alice'}, {id: 2, name: 'Bob'}];
let id = 3;


class Miniapi {
constructor (name) {
Expand Down Expand Up @@ -51,7 +52,7 @@ class Miniapi {

start () {
this.server = http.createServer((req, res) => {
res.statusCode = 200;

let url = req.url.match(/\/(.*)\/(.*)/);
requestHandler.setData(this.data);
requestHandler.setName(this.name);
Expand All @@ -72,67 +73,43 @@ class Miniapi {
});

this.server.listen(this.port, this.hostname, () => {
console.log(`[miniapi server running at http://${this.hostname}:${this.port}/]`);
log.info(`[miniapi server running at http://${this.hostname}:${this.port}/]`);
});
}

stop () {
this.server.close();
log.info(`[miniapi server stopped`);
}

version () {
return '1.0';
}

reply (url, method, res, requestBody) {
let data = {};
res.data = {};
res.statusCode = 404;

switch (method) {
case 'GET':
res = requestHandler.get(url, method, res);
data = res.data;
break;
case 'POST': if (null != url && url[1] === this.name) {
let newData = JSON.parse(requestBody);
newData.id = id++;
this.data.push(newData);
data = newData;
res.statusCode = 200;
} else {
data = {error: 'POST Not supported yet. Stay tuned.'};
res.statusCode = 404;
}
case 'POST':
res = requestHandler.post(url, method, res, requestBody);
break;
case 'PUT':
if (null != url && url[1] === this.name && url[2] != '') {
data = this.data.filter( item => item.id==url[2])[0] || {};
if (data.id != undefined) {
let newData = JSON.parse(requestBody);
this.data = this.data.filter( item => item.id!=url[2]);
newData.id = parseInt(url[2]);
this.data.push(newData);
data = newData;
}
res.statusCode = data.id==undefined?404:200;
}
res = requestHandler.put(url, method, res, requestBody);
break;
case 'DELETE':
if (null == url || url[1] === '' || (url[1] === this.name && url[2] == '')) {
res.statusCode = 404
} else if (url[1] === this.name && url[2] != '') {
data = this.data.filter( item => item.id==url[2])[0] || {};
this.data = this.data.filter( item => item.id!=url[2]);
res.statusCode = data.id==undefined?404:200;;
}
res = requestHandler.delete(url, method, res);
break;
default:
data = { error: 'Whatever you tried, it is not supported.'};
res.data = { error: 'Whatever you tried, it is not supported.'};
res.statusCode = 404;
break;
}

res.end(`${JSON.stringify(data)}\n`);
res.end(`${JSON.stringify(res.data)}\n`);
}
};

Expand Down
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "miniapi",
"version": "1.0.8",
"version": "1.0.9",
"description": "Minimalistic api server",
"main": "index.js",
"scripts": {
Expand Down
60 changes: 60 additions & 0 deletions requestHandler.js
Original file line number Diff line number Diff line change
@@ -1,3 +1,7 @@
const log = require('./log');

let id = 3;

class RequestHandler {
constructor () {
this.data = {};
Expand Down Expand Up @@ -28,9 +32,65 @@ class RequestHandler {
res.statusCode = data.id==undefined?404:200;
}
res.data = data;
log.byCode(`GET ${res.statusCode} ${url}`, res.statusCode);
return res;
}

post (url, method, res,requestBody) {
let data = {};
res.statusCode = 404;
if (null != url && url[1] === this.name) {
let newData = JSON.parse(requestBody);
newData.id = id++;
this.data.push(newData);
data = newData;
res.statusCode = 200;
} else {
data = {error: 'POST Not supported yet. Stay tuned.'};
res.statusCode = 404;
}
res.data = data;
log.byCode(`GET ${res.statusCode} ${url}`, res.statusCode);
return res;
}

delete (url, method, res) {
let data = {};
res.statusCode = 404;

if (null == url || url[1] === '' || (url[1] === this.name && url[2] == '')) {
res.statusCode = 404
} else if (url[1] === this.name && url[2] != '') {
data = this.data.filter( item => item.id==url[2])[0] || {};
this.data = this.data.filter( item => item.id!=url[2]);
res.statusCode = data.id==undefined?404:200;;
}
res.data = data;
log.byCode(`GET ${res.statusCode} ${url}`, res.statusCode);
return res;
}

put (url, method, res, requestBody) {
let data = {};
res.statusCode = 404;
if (null != url && url[1] === this.name && url[2] != '') {
data = this.data.filter( item => item.id==url[2])[0] || {};
if (data.id != undefined) {
let newData = JSON.parse(requestBody);
this.data = this.data.filter( item => item.id!=url[2]);
newData.id = parseInt(url[2]);
this.data.push(newData);
data = newData;
}
res.statusCode = data.id==undefined?404:200;
}
res.data = data;
log.byCode(`GET ${res.statusCode} ${url}`, res.statusCode);
return res;
}



}

module.exports=new RequestHandler();

0 comments on commit adb0bdf

Please sign in to comment.