Split database code into it's own module

This commit is contained in:
Jacob Windle 2019-01-27 11:53:17 -05:00
parent e26986770d
commit 7dd14cbd06
2 changed files with 60 additions and 53 deletions

View File

@ -1,8 +1,7 @@
var http = require('http'); var http = require('http');
var winston = require("winston"); var winston = require("winston");
var fs = require("fs"); var fs = require("fs");
var sqlite3 = require('sqlite3').verbose(); var myDb = require("./lib/db.js");
var db = new sqlite3.Database("./proxy.db");
const url = require("url"); const url = require("url");
// Rudimentary logger. // Rudimentary logger.
@ -38,7 +37,7 @@ const processRequest = (request, response) => {
logger.info({message: "Requesting: " + req.url}); logger.info({message: "Requesting: " + req.url});
const hostUrl = new url.URL(req.url); const hostUrl = new url.URL(req.url);
visitHost(hostUrl.hostname); myDb.visitHost(hostUrl.hostname);
// Complicated line of JS to forward request, and pipe it to the // Complicated line of JS to forward request, and pipe it to the
// response object. // response object.
req.pipe(http.request(req.url, (resp) => {resp.pipe(res)})); req.pipe(http.request(req.url, (resp) => {resp.pipe(res)}));
@ -57,54 +56,6 @@ function startServer() {
return server; return server;
} }
/** TODO - MAKE THESE FUNCTIONS THEIR OWN MODULE. VVV myDb.initializeDatabase();
* FIXME - need to close the database connection
* on exit.
*/
/**
* Initialize our database.
*/
function initializeDatabase() {
db.serialize(() => {
db.run("create table hosts (hostname TEXT, visitcount Int)", (err, row) => {
if (err !== undefined || err !== null) {
console.log("Error creating database, it likely exists already.");
}
});
});
// db.close();
}
/**
* Update the visit count for a host logged by the proxy
* @param {string} hostname Host logged by proxy
*/
function updateVisitCount(hostname) {
db.serialize(() => {
db.run("update hosts set visitcount = visitcount + 1 where hostname = ?", [hostname]);
});
// db.close();
}
function addHostToTable(hostname) {
db.serialize(() => {
db.run("insert into hosts (hostname, visitcount) values (?, 0)", [hostname])
})
// db.close();
}
function visitHost(hostname) {
return db.serialize(() => {
db.get("select * from hosts where hostname = ?", [hostname], (err, row) => {
if (row === undefined) {
addHostToTable(hostname);
} else {
updateVisitCount(hostname);
}
})
});
}
initializeDatabase();
startServer(); startServer();

56
lib/db.js Normal file
View File

@ -0,0 +1,56 @@
var sqlite3 = require('sqlite3').verbose();
var db = new sqlite3.Database("./proxy.db")
/** TODO - MAKE THESE FUNCTIONS THEIR OWN MODULE. VVV
* FIXME - need to close the database connection
* on exit.
*/
/**
* Initialize our database.
*/
exports.initializeDatabase = function() {
db.serialize(() => {
db.run("create table hosts (hostname TEXT, visitcount Int)", (err, row) => {
if (err !== undefined || err !== null) {
console.log("Error creating database, it likely exists already.");
}
});
});
}
/**
* Update the visit count for a host logged by the proxy
* @param {string} hostname Host logged by proxy
*/
function updateVisitCount(hostname) {
db.serialize(() => {
db.run("update hosts set visitcount = visitcount + 1 where hostname = ?", [hostname]);
});
}
/**
* Add a row for a host to the hosts table.
* @param {string} hostname Host that was freshly visited.
*/
function addHostToTable(hostname) {
db.serialize(() => {
db.run("insert into hosts (hostname, visitcount) values (?, 0)", [hostname])
})
}
/**
* Either initialize a row in the database, or update the visit count for a row.
* @param {string} hostname Host that was visited
*/
exports.visitHost = function (hostname) {
return db.serialize(() => {
db.get("select * from hosts where hostname = ?", [hostname], (err, row) => {
if (row === undefined) {
addHostToTable(hostname);
} else {
updateVisitCount(hostname);
}
})
});
}