Added localDatabase support with NeDB

This commit is contained in:
Bram van der Veen 2015-08-15 21:48:38 +02:00
parent 7eb6126402
commit 3d0fb303e1
6 changed files with 68 additions and 34 deletions

1
.gitignore vendored
View file

@ -1,2 +1,3 @@
node_modules
settings.json
resources/databases/*

27
database.js Normal file
View file

@ -0,0 +1,27 @@
//database.js
var config = require('./configuration');
var fs = require('fs');
module.exports = function () {
if (!config().localDatabase) return require('mongoskin').db('mongodb://' + config().database);
else {
var databases = {
index: new (require('nedb'))({ filename: __dirname + '/resources/databases/index.db', autoload: true})
};
return {
'collection': function (collection) {
var database = databases[collection];
database.drop = function () {
fs.writeFileSync(database.filename, '');
}
return database;
},
'close': function () {
return;
}
}
}
}

View file

@ -6,7 +6,7 @@ var schoolID = config().schoolID;
//Getting first and third party modules
var fs = require('fs');
var database = require('mongoskin').db('mongodb://' + config().database);
var database = require('./database')();
function get(req, res, next, search) {
var index = database.collection('index');
@ -14,9 +14,21 @@ function get(req, res, next, search) {
easter(search) ? search = easter(search).name : null;
search = new RegExp(search, 'i');
if (!config().localDatabase) {
index.find({$or : [{id : search}, {name : search}, {first_name : search}, {last_name : search}, {username: search}]}).toArray(function (err, databaseEntry) {
if (err) console.warn(err);
handle(req, next, databaseEntry);
});
}
else {
index.find({$or : [{id : search}, {name : search}, {first_name : search}, {last_name : search}, {username: search}]}, function (err, databaseEntry) {
if (err) console.warn(err);
handle(req, next, databaseEntry);
});
}
}
function handle(req, next, databaseEntry) {
if ((req.easter || {}).type == 'RIP') {
require('./auth').is(req, res, function () {
res.render('schedule', req);
@ -38,7 +50,6 @@ function get(req, res, next, search) {
res.render('list', req);
});
}
});
}
function api(req, callback) {

View file

@ -17,6 +17,7 @@
"jade": "^1.11.0",
"mongodb": "^1.4.38",
"mongoskin": "^1.4.13",
"nedb": "^1.1.3",
"socks5-http-client": "^1.0.1",
"socks5-https-client": "^1.1.1"
}

View file

@ -35,7 +35,7 @@ function getSchedule(getUrl, callback) {
});
}
function types(page) {
function scheduleTypes(page) {
var extract = cheerio('table tr td[valign="bottom"] table tr td b, table tr td[valign="bottom"] table tr td a', page).text().split(/\s\s/);
var tab = 0;
var types = [];
@ -54,7 +54,7 @@ function types(page) {
//Function for converting the page into a json dataset.
function toJSON(page) {
var result = cheerio('td:nth-child(3) table', page);
var types = types(page);
var types = scheduleTypes(page);
var isTeacher = cheerio(cheerio(page).find('tr.CoreDark').find('td')[3]).find('a').html() == null;
var amountOfDays = cheerio(result).find('tr.AccentDark').find('td').length - 1;
var amountOfHours = config().amountOfHours;

View file

@ -1,9 +1,9 @@
var http = require('socks5-http-client');
var cheerio = require('cheerio');
var iconv = require('iconv-lite');
var mongodb = require('mongodb').MongoClient;
var config = require('./configuration');
var url = require('url');
var database = require('./')();
var scheduletypes = [
'Klasrooster',
@ -12,7 +12,6 @@ var scheduletypes = [
'Lokaalrooster'
];
var schoolID;
var database;
//Function for getting pages with http requests.
function get() {
@ -123,12 +122,7 @@ function rip(data) {
//Function being called to access functionality from this module.
function crawl() {
schoolID = config().schoolID;
mongodb.connect('mongodb://' + config().database, function (error, db) {
if (error) console.warn(error);
database = db;
get();
});
}
@ -144,6 +138,6 @@ module.exports = {
'crawl' : crawl
}
if (process.argv[2] == 'test') {
if (process.argv[2] == 'test' || process.argv[2] == 'rip') {
module.exports.crawl(934);
}