-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathserver.js
More file actions
131 lines (123 loc) · 4.36 KB
/
server.js
File metadata and controls
131 lines (123 loc) · 4.36 KB
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
130
131
/**
* Created by Danny on 10/18/2016.
*/
var PORT_NUM = process.env.PORT||8000;
var http = require('http');
var url = require('url');
var qs = require('querystring');
var fs = require('fs');
var parse = require('csv-parse')
//Read in csv data rows
//var searchData={};
var id=[];
var title=[];
var author=[];
var publisher=[];
var pub_date=[];
var figure_number=[];
var technique_group=[];
var gene=[];
console.log("Parsing csv data...");
var isFirstRow=true;
var index=0;
fs.createReadStream('test_data.csv')
.pipe(parse({delimiter: ','}))
.on('data', function(csvData) {
if(!isFirstRow){
id.push(index)
title.push(csvData[0])
author.push(csvData[1])
publisher.push(csvData[2])
pub_date.push(csvData[3])
figure_number.push(csvData[4])
technique_group.push(csvData[5])
gene.push(csvData[6])
} else {
isFirstRow=false;
}
index++;
})
.on('end',function() {
//do something wiht csvData
console.log("Finished parsing csv data.")
});
var server = http.createServer(function(request, response){
//Set header for content type and CORS
//response.setHeader('Content-Type', 'application/json; charset="utf-8"');
response.setHeader('Access-Control-Allow-Origin', '*');
//log the request method
console.log(request.method);
switch(request.method) {
case 'GET':
response.setHeader('Content-Type', 'application/json; charset="utf-8"');
response.end("PSEngine search backend. Accepting POST requests");
break;
case 'POST':
//Search publication by gene
var item = '';
var resultSet=[];
request.on('data', function (chunk) {
item += chunk;
if (item.length > 1e6)
//Too much POST data, end connection
request.connection.destroy();
});
request.on('end', function(){
//Begins search in backend database
item= qs.parse(item);
var queryString = item['body'];
if(typeof(queryString)!='string'){
//improper query string
response.end('{}');
return;
}
if(queryString==""){
//query string empty
response.end('{}');
return;
}
var queryString = queryString.toUpperCase();
console.log(queryString);
for(i=0; i<gene.length; i++){
if(gene[i].indexOf(queryString) > -1) {
resultSet.push(i);
}
}
//Done generating resultSet, collect data and respond
//console.log(resultSet);
var result={};
for(i=0; i<resultSet.length; i++){
result[i]={
'id':id[resultSet[i]],
'title':title[resultSet[i]],
'author':author[resultSet[i]],
'publisher':publisher[resultSet[i]],
'pub_date':pub_date[resultSet[i]],
'figure_number':figure_number[resultSet[i]],
'technique_group':technique_group[resultSet[i]],
'gene':gene[resultSet[i]]
}
}
//console.log(result);
var resultstr=JSON.stringify(result);
response.setHeader('Content-Length', Buffer.byteLength(resultstr));
response.end(resultstr);
});
break;
case 'DELETE':
//Delete operation unneeded
response.end();
break;
case 'PUT':
//Update operation unneeded
response.end();
break;
case 'OPTIONS':
//CORS preflight, allow all methods listed above
response.setHeader("Access-Control-Allow-Methods", "GET, POST, DELETE, PUT");
response.end();
break;
}
});
server.listen(PORT_NUM);
console.log("Server up at port "+PORT_NUM);