Created
February 15, 2020 23:42
-
-
Save spion/2779ae6dc9552c229c1eeacd90c03bf3 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
diff --git a/frameworks/JavaScript/express/express-postgres.dockerfile b/frameworks/JavaScript/express/express-postgres.dockerfile | |
index f2907bd02..9b2196082 100644 | |
--- a/frameworks/JavaScript/express/express-postgres.dockerfile | |
+++ b/frameworks/JavaScript/express/express-postgres.dockerfile | |
@@ -1,9 +1,9 @@ | |
FROM node:12.3.1-slim | |
-COPY ./ ./ | |
- | |
+COPY package.json ./ | |
RUN npm install | |
+COPY ./ ./ | |
ENV NODE_ENV production | |
CMD ["node", "postgresql-app.js"] | |
diff --git a/frameworks/JavaScript/express/package.json b/frameworks/JavaScript/express/package.json | |
index 15a169b14..7c9b36ebe 100644 | |
--- a/frameworks/JavaScript/express/package.json | |
+++ b/frameworks/JavaScript/express/package.json | |
@@ -3,18 +3,18 @@ | |
"version": "0.0.1", | |
"private": true, | |
"dependencies": { | |
- "body-parser": "1.18.2", | |
+ "fast-url-parser": "^1.1.3", | |
+ "body-parser": "^1.19.0", | |
"dateformat": "3.0.3", | |
"escape-html": "1.0.3", | |
- "express": "4.16.2", | |
- "express-graphql": "0.6.12", | |
+ "express": "^4.17.1", | |
+ "express-graphql": "^0.9.0", | |
"graphql": "0.13.2", | |
"graphql-tools": "3.1.1", | |
"mongoose": "5.0.6", | |
"mysql": "2.16.0", | |
"mysql2": "1.6.5", | |
- "pg": "4.5.7", | |
- "pg-promise": "8.4.6", | |
+ "pg": "^7.0.0", | |
"pug": "2.0.1", | |
"sequelize": "5.10.0" | |
} | |
diff --git a/frameworks/JavaScript/express/postgresql-app.js b/frameworks/JavaScript/express/postgresql-app.js | |
index 3e3f24aac..1a97d1370 100644 | |
--- a/frameworks/JavaScript/express/postgresql-app.js | |
+++ b/frameworks/JavaScript/express/postgresql-app.js | |
@@ -1,7 +1,8 @@ | |
+require('fast-url-parser').replace(); | |
+ | |
const express = require('express'), | |
app = express(), | |
- bodyParser = require('body-parser'), | |
- pgp = require('pg-promise')(), | |
+ {Pool} = require('pg'); | |
helper = require('./helper'); | |
const connection = { | |
@@ -12,12 +13,13 @@ const connection = { | |
dialect: 'postgres' | |
} | |
-const db = pgp(`postgres://${connection.username}:${connection.password}@${connection.host}:5432/${connection.db}`); | |
+const db = new Pool({ | |
+ connectionString: `postgres://${connection.username}:${connection.password}@${connection.host}:5432/${connection.db}`, | |
+ // max: 20 | |
+}) | |
app.set('view engine', 'pug'); | |
app.set('views', __dirname + '/views'); | |
-app.use(bodyParser.urlencoded({ extended: true })); | |
-app.use(bodyParser.json()); | |
// Set headers for all routes | |
app.use((req, res, next) => { | |
@@ -37,10 +39,10 @@ app.get('/db', async (req, res) => { | |
app.get('/queries', async (req, res) => { | |
const results = [], | |
- queries = Math.min(parseInt(req.query.queries) || 1, 500); | |
+ queries = Math.min(Number(req.query.queries) || 1, 500); | |
for (let i = 0; i < queries; i++) { | |
- | |
+ | |
results.push(await getRandomWorld()); | |
} | |
@@ -49,40 +51,42 @@ app.get('/queries', async (req, res) => { | |
app.get('/fortunes', async (req, res) => { | |
- let fortunes = await getAllFortunes() | |
+ let fortunes = (await db.query('select * from fortune', [])).rows; | |
const newFortune = { id: 0, message: "Additional fortune added at request time." }; | |
fortunes.push(newFortune); | |
fortunes.sort((a, b) => (a.message < b.message) ? -1 : 1); | |
- res.render('fortunes/index', { fortunes: fortunes }); | |
+ res.render('fortunes/index', { fortunes }); | |
}); | |
app.get('/updates', async (req, res) => { | |
const results = [], | |
- queries = Math.min(parseInt(req.query.queries) || 1, 500); | |
- | |
- for (let i = 1; i <= queries; i++) { | |
- | |
- results.push(await updateRandomWorld()) | |
- } | |
- | |
- res.json(results); | |
-}); | |
- | |
-const getRandomWorld = async () => { | |
+ queries = Math.min(Number(req.query.queries) || 1, 500); | |
- return await db.one(`select * from world where id = ${helper.randomizeNum()}`, [true]) | |
-}; | |
+ console.log('Doing updates', queries); | |
+ const client = await db.connect() | |
+ try { | |
+ for (let i = 1; i <= queries; i++) { | |
-const updateRandomWorld = async () => { | |
+ let res = await client.query( | |
+ 'update world set randomNumber = $1 where id = $2 returning id, randomNumber', | |
+ [helper.randomizeNum(), helper.randomizeNum()]) | |
- return await db.oneOrNone(`update world set randomNumber = ${helper.randomizeNum()} where id = ${helper.randomizeNum()} returning id, randomNumber`, [true]) | |
-}; | |
+ results.push(res.rows[0]) | |
+ } | |
-const getAllFortunes = async () => { | |
+ res.json(results); | |
+ } finally { | |
+ client.release(); | |
+ } | |
+}); | |
- return await db.many('select * from fortune', [true]); | |
-}; | |
+async function getOne(text, args) { | |
+ return (await db.query(text, args)).rows[0]; | |
+} | |
+function getRandomWorld() { | |
+ return getOne(`select * from world where id = $1`, [helper.randomizeNum()]) | |
+} | |
app.listen(8080, () => { | |
console.log('listening on port 8080'); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment