diff --git a/log.js b/log.js new file mode 100644 index 0000000..713fc85 --- /dev/null +++ b/log.js @@ -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(); diff --git a/miniapi.js b/miniapi.js index 5036059..7637120 100644 --- a/miniapi.js +++ b/miniapi.js @@ -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) { @@ -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); @@ -72,12 +73,13 @@ 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 () { @@ -85,54 +87,29 @@ class Miniapi { } 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`); } }; diff --git a/package.json b/package.json index 959a241..51d306f 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "miniapi", - "version": "1.0.8", + "version": "1.0.9", "description": "Minimalistic api server", "main": "index.js", "scripts": { diff --git a/requestHandler.js b/requestHandler.js index 2e9a857..cbbd49a 100644 --- a/requestHandler.js +++ b/requestHandler.js @@ -1,3 +1,7 @@ +const log = require('./log'); + +let id = 3; + class RequestHandler { constructor () { this.data = {}; @@ -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();