-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathindex.js
129 lines (111 loc) · 3.84 KB
/
index.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
var express = require('express');
var cors = require('cors');
var app = express().use('*',cors());
//const graphQLServer = express().use('*', cors());
var pg = require('pg');
var fs = require('fs');
var pg = require('pg');
var requestFunc = require('request');
var cheerio = require('cheerio');
var Pool = pg.Pool;
app.set('port', (process.env.PORT || 5000));
app.use(express.static(__dirname + '/public'));
// views is directory for all template files
app.set('views', __dirname + '/views');
app.set('view engine', 'ejs');
app.get('/', function(request, response) {
response.render('pages/index');
});
var dbConfig = {
host: process.env.HOST,
user: process.env.USER,
password: process.env.PASSWORD,
database: process.env.DATABASE,
ssl: true
};
console.log("this is the newest version with config " + JSON.stringify(dbConfig));
var pool = new Pool(dbConfig);
var voterQuery = function (request, response) {
var query = `SELECT * FROM voters WHERE `;
var useAnd = false;
if (!(request.query.fname || request.query.lname)) {
throw 'You must specify at least one of fname, lname.';
}
if (request.query.fname) {
query += 'first_name ilike \'' + request.query.fname + '\'';
useAnd = true;
}
if (request.query.lname) {
query += ((useAnd)?' AND ':'') + ' last_name ilike \'' + request.query.lname + '\'';
}
query += ' LIMIT 1000;';
var voters = pool.query(query)
.then( (result) => {
var rows = result.rows;
if (request.query.age) {
var age = parseInt(request.query.age, 10)
rows = result.rows.filter( (item) => {
return (age == parseInt(item.birth_age));
});
}
response.setHeader('Content-Type', 'application/json');
response.send(JSON.stringify(rows));
})
.catch((err) => {
if (err) {
console.log("Got an error: " + JSON.stringify(err));
response.setHeader('Content-Type', 'application/json');
response.send(JSON.stringify(err));
}
});
}
var ballotQuery = function (request, response) {
if (!(request.query.voternum)) {
response.send('You must specify a voter registration number.');
}
var url = 'https://vt.ncsbe.gov/voter_search_public/voter_details.aspx?voter_reg_num=';
url += request.query.voternum + '&county=11';
requestFunc(url, function(error, page, html){
// First we'll check to make sure no errors occurred when making the request
if(!error){
// Next, we'll utilize the cheerio library on the returned html which will essentially give us jQuery functionality
var $ = cheerio.load(html);
var sballots = $('#sampleballotslist').find('a');
var result = {
voter_reg_num: request.query.voternum,
ballot: 'https://vt.ncsbe.gov/voter_search_public/' + sballots.last('a').attr('href')
};
response.setHeader('Content-Type', 'application/json');
response.send(JSON.stringify(result));
}
else {
response.setHeader('Content-Type', 'application/json');
response.send('There was an error querying the NC BOE site.');
}
})
}
app.get('/api', function (request, response) {
voterQuery(request, response);
});
app.get('/api/voters', function (request, response) {
voterQuery(request, response);
});
app.get('/api/ballot', function (request, response) {
ballotQuery(request, response);
});
// var Client = pg.Client;
//
// var client = new Client(process.env.DATABASE_URL);
// client.connect();
//
// app.get('/db', function (request, response) {
//
// client.query('SELECT * from test_table', function(err, res) {
// if (err) console.log("Error: " + JSON.stringify(err));
// console.log('This is it ' + res.rows[0].id + ": " + res.rows[0].name);
// client.end();
// });
// });
app.listen(app.get('port'), function() {
console.log('Node app is running on port', app.get('port'));
});