Skip to content

Commit cdd0da7

Browse files
committed
Dependencies update + pg-promise for queries.
1 parent ffa38a1 commit cdd0da7

3 files changed

Lines changed: 63 additions & 64 deletions

File tree

js/graphql-schema.js

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,11 +14,11 @@ const graphql = require('graphql'),
1414
dico = require('./utils/dico'),
1515
ft = dico.fieldTypes,
1616
sqls = require('./utils/sql-select'),
17-
errors = require('./utils/errors')
17+
errors = require('./utils/errors'),
18+
query = require('./utils/query')
1819

1920
const mIds = dico.modelIds
20-
const db = {}
21-
db.conn = pgp(config.connectionString);
21+
const db = query.db;
2222

2323
const {
2424
GraphQLObjectType,

js/utils/query.js

Lines changed: 54 additions & 55 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,11 @@
1-
/*! *******************************************************
2-
*
1+
/*!
32
* evolutility-server-node :: utils/query.js
43
*
54
* https://github.com/evoluteur/evolutility-server-node
65
* (c) 2019 Olivier Giulieri
7-
********************************************************* */
6+
*/
87

9-
const pg = require('pg'),
8+
const pgp = require('pg-promise')(),
109
csv = require('csv-express'),
1110
config = require('../../config.js'),
1211
parseConnection = require('pg-connection-string').parse,
@@ -17,71 +16,71 @@ const dbConfig = parseConnection(config.connectionString)
1716
dbConfig.max = 10; // max number of clients in the pool
1817
dbConfig.idleTimeoutMillis = 30000; // max client idle time before being closed
1918

20-
const pool = new pg.Pool(dbConfig);
21-
22-
pool.on('error', function (err, client) {
23-
console.error('Unexpected error on idle client', err.message, err.stack)
24-
process.exit(-1)
25-
})
19+
const db = {}
20+
db.conn = pgp(config.connectionString);
2621

2722
// - run a query and return the result in request
28-
function runQuery(res, sql, values, singleRecord, format, header, fnPrep = null){
23+
function runQuery(res, sql, values, singleRecord, format, header, fnPrep){
2924
logger.logSQL(sql);
30-
31-
// Get a Postgres client from the connection pool
32-
pool.connect((err, client, done) => {
33-
// SQL Query > Select Data
34-
if(!client){
35-
errors.badRequest(res, 'No Database connection.', 500)
36-
}
37-
client.query(sql, values)
38-
.then(data => {
39-
done();
40-
var results = (data && data.rows) ? data.rows : [];
41-
var nbRecords = results.length;
42-
if(format==='csv'){
43-
if(nbRecords){
44-
if(header){
45-
var headers={};
46-
for (key in results[0]) {
47-
headers[key] = header[key] || key;
48-
}
49-
results.unshift(headers);
25+
// SQL Query > Select Data
26+
db.conn[singleRecord ? 'one' : 'many'](sql, values)
27+
.then(data => {
28+
const results = data || [];
29+
const nbRecords = results ? results.length : 0;
30+
if(format==='csv'){
31+
if(nbRecords){
32+
if(header){
33+
var headers={};
34+
for (key in results[0]) {
35+
headers[key] = header[key] || key;
5036
}
51-
logger.logCount(results.length || 0);
52-
return res.csv(results);
37+
results.unshift(headers);
5338
}
54-
return null;
39+
logger.logCount(results.length || 0);
40+
return res.csv(results);
41+
}
42+
return res.csv(null);
43+
}else if(singleRecord){
44+
logger.logCount(1);
45+
if(fnPrep){
46+
return res.json(fnPrep(results));
47+
}
48+
return res.json(results);
49+
}else{
50+
res.setHeader('_count', nbRecords);
51+
if(nbRecords && results[0]._full_count){
52+
res.setHeader('_full_count', results[0]._full_count);
53+
// Remove artificual "_full_count" prop (used to return the total number of records) from every record.
54+
// results.forEach(r => {delete r._full_count})
55+
}
56+
logger.logCount(results.length || 0);
57+
if(fnPrep){
58+
return res.json(fnPrep(results));
59+
}
60+
return res.json(results);
61+
}
62+
})
63+
.catch(err => {
64+
if(err.code===0){
65+
if(format==='csv'){
66+
// - sending something to avoid empty page in browser
67+
return res.csv(singleRecord ? {id: null} : [{id: null}]);
5568
}else if(singleRecord){
56-
if(fnPrep){
57-
logger.logCount(1, true);
58-
return res.json(fnPrep(results[0]));
59-
}else{
60-
logger.logCount(1);
61-
return res.json(results.length?results[0]:null);
62-
}
69+
return res.json(null);
6370
}else{
64-
res.setHeader('_count', nbRecords);
65-
if(nbRecords && results[0]._full_count){
66-
res.setHeader('_full_count', results[0]._full_count);
67-
// Remove artificual "_full_count" prop (used to return the total number of records) from every record.
68-
// results.forEach(r => {delete r._full_count})
69-
}
70-
logger.logCount(results.length || 0);
71-
return res.json(results);
71+
return res.json([]);
7272
}
73-
})
74-
.catch(err => {
75-
console.log(err.stack)
76-
errors.badRequest(res, 'Database error.', 500)
77-
})
78-
})
73+
}
74+
console.log(err)
75+
errors.badRequest(res, 'Database error.', 500)
76+
})
7977
}
8078

8179
// --------------------------------------------------------------------------------------
8280

8381
module.exports = {
8482

83+
db: db,
8584
runQuery: runQuery,
8685

8786
}

package.json

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -16,17 +16,17 @@
1616
},
1717
"dependencies": {
1818
"chalk": "~2.4.2",
19-
"body-parser": "~1.18.3",
19+
"body-parser": "~1.19.0",
2020
"csv-express": "~1.2.2",
2121
"debug": "~4.1.1",
2222
"express": "~4.17.1",
23-
"express-graphql": "~0.8.0",
24-
"graphql": "~14.4.2",
23+
"express-graphql": "~0.9.0",
24+
"graphql": "~14.5.4",
2525
"formidable": "~1.2.1",
26-
"helmet": "~3.18.0",
27-
"pg": "^7.11.0",
26+
"helmet": "~3.20.1",
27+
"pg": "^7.12.1",
2828
"pg-connection-string": "~2.1.0",
29-
"pg-promise": "^8.7.3",
29+
"pg-promise": "^9.1.2",
3030
"shortid": "~2.2.14",
3131
"supervisor": "~0.12.0",
3232
"underscore": "~1.9.1"

0 commit comments

Comments
 (0)