experimental architecture changes, session support in progress

This commit is contained in:
Mikayla Dobson
2022-07-04 15:38:40 -05:00
parent e721cd425f
commit d84675910a
9 changed files with 121 additions and 32 deletions

27
loaders/express.js Normal file
View File

@@ -0,0 +1,27 @@
require('dotenv').config();
const cors = require('cors');
const session = require('express-session');
const { json, urlencoded } = require('express');
module.exports = (app) => {
app.use(cors());
app.use(json());
app.use(urlencoded({
extended: true
}));
app.use(require('../routes/API'));
app.use(session({
secret: process.env.EXPRESS_SECRET,
cookie: { maxAge: 8*60*60*1000, secure: false },
resave: false,
saveUninitialized: true,
store: new (require('connect-pg-simple')(session))({
conString: process.env.CONNECTION,
createTableIfMissing: true,
})
}));
}

7
loaders/index.js Normal file
View File

@@ -0,0 +1,7 @@
const passportLoader = require('./passport');
const expressLoader = require('./express');
module.exports = async (app) => {
const passport = await passportLoader(app);
const express = await expressLoader(app);
}

26
loaders/passport.js Normal file
View File

@@ -0,0 +1,26 @@
const passport = require('passport');
const LocalStrategy = require('passport-local');
const client = require('../db/Client');
module.exports = (app) => {
app.use(passport.initialize());
app.use(passport.session());
passport.serializeUser((user, done) => {
done(null, user.id);
});
passport.deserializeUser((id, done) => {
done(null, { id });
});
/***
** TO DO: FINISH CONFIGURING LOCAL STRATEGY
app.use(new LocalStrategy(async (email, password, done) => {
const newClient = client();
const account = await newClient.query("SELECT * FROM users WHERE email = ($1)", [email])
}));
***/
}

52
package-lock.json generated
View File

@@ -11,6 +11,7 @@
"dependencies": { "dependencies": {
"bcrypt": "^5.0.1", "bcrypt": "^5.0.1",
"body-parser": "^1.20.0", "body-parser": "^1.20.0",
"connect-pg-simple": "^7.0.0",
"cors": "^2.8.5", "cors": "^2.8.5",
"dotenv": "^16.0.0", "dotenv": "^16.0.0",
"express": "^4.17.3", "express": "^4.17.3",
@@ -72,6 +73,21 @@
"node": ">=6" "node": ">=6"
} }
}, },
"node_modules/@types/node": {
"version": "18.0.1",
"resolved": "https://registry.npmjs.org/@types/node/-/node-18.0.1.tgz",
"integrity": "sha512-CmR8+Tsy95hhwtZBKJBs0/FFq4XX7sDZHlGGf+0q+BRZfMbOTkzkj0AFAuTyXbObDIoanaBBW0+KEW+m3N16Wg=="
},
"node_modules/@types/pg": {
"version": "8.6.5",
"resolved": "https://registry.npmjs.org/@types/pg/-/pg-8.6.5.tgz",
"integrity": "sha512-tOkGtAqRVkHa/PVZicq67zuujI4Oorfglsr2IbKofDwBSysnaqSx7W1mDqFqdkGE6Fbgh+PZAl0r/BWON/mozw==",
"dependencies": {
"@types/node": "*",
"pg-protocol": "*",
"pg-types": "^2.2.0"
}
},
"node_modules/@types/uuid": { "node_modules/@types/uuid": {
"version": "8.3.4", "version": "8.3.4",
"resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-8.3.4.tgz", "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-8.3.4.tgz",
@@ -567,6 +583,18 @@
"node": ">=8" "node": ">=8"
} }
}, },
"node_modules/connect-pg-simple": {
"version": "7.0.0",
"resolved": "https://registry.npmjs.org/connect-pg-simple/-/connect-pg-simple-7.0.0.tgz",
"integrity": "sha512-fbNZUkxz8m+FRbctoxAU18DzRKp8GQSL+9gTJ0+LgSCElXLon2q8tDE8V74jUzf+w2ARZX8HKKyV0laX1NUZ/Q==",
"dependencies": {
"@types/pg": "^8.6.1",
"pg": "^8.7.1"
},
"engines": {
"node": ">=12.0.0"
}
},
"node_modules/console-control-strings": { "node_modules/console-control-strings": {
"version": "1.1.0", "version": "1.1.0",
"resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz",
@@ -2825,6 +2853,21 @@
"defer-to-connect": "^1.0.1" "defer-to-connect": "^1.0.1"
} }
}, },
"@types/node": {
"version": "18.0.1",
"resolved": "https://registry.npmjs.org/@types/node/-/node-18.0.1.tgz",
"integrity": "sha512-CmR8+Tsy95hhwtZBKJBs0/FFq4XX7sDZHlGGf+0q+BRZfMbOTkzkj0AFAuTyXbObDIoanaBBW0+KEW+m3N16Wg=="
},
"@types/pg": {
"version": "8.6.5",
"resolved": "https://registry.npmjs.org/@types/pg/-/pg-8.6.5.tgz",
"integrity": "sha512-tOkGtAqRVkHa/PVZicq67zuujI4Oorfglsr2IbKofDwBSysnaqSx7W1mDqFqdkGE6Fbgh+PZAl0r/BWON/mozw==",
"requires": {
"@types/node": "*",
"pg-protocol": "*",
"pg-types": "^2.2.0"
}
},
"@types/uuid": { "@types/uuid": {
"version": "8.3.4", "version": "8.3.4",
"resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-8.3.4.tgz", "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-8.3.4.tgz",
@@ -3204,6 +3247,15 @@
"xdg-basedir": "^4.0.0" "xdg-basedir": "^4.0.0"
} }
}, },
"connect-pg-simple": {
"version": "7.0.0",
"resolved": "https://registry.npmjs.org/connect-pg-simple/-/connect-pg-simple-7.0.0.tgz",
"integrity": "sha512-fbNZUkxz8m+FRbctoxAU18DzRKp8GQSL+9gTJ0+LgSCElXLon2q8tDE8V74jUzf+w2ARZX8HKKyV0laX1NUZ/Q==",
"requires": {
"@types/pg": "^8.6.1",
"pg": "^8.7.1"
}
},
"console-control-strings": { "console-control-strings": {
"version": "1.1.0", "version": "1.1.0",
"resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz",

View File

@@ -16,6 +16,7 @@
"dependencies": { "dependencies": {
"bcrypt": "^5.0.1", "bcrypt": "^5.0.1",
"body-parser": "^1.20.0", "body-parser": "^1.20.0",
"connect-pg-simple": "^7.0.0",
"cors": "^2.8.5", "cors": "^2.8.5",
"dotenv": "^16.0.0", "dotenv": "^16.0.0",
"express": "^4.17.3", "express": "^4.17.3",

View File

@@ -1,33 +1,18 @@
const express = require('express'); const express = require('express');
const cors = require('cors');
const app = express(); const app = express();
const session = require('express-session');
require('dotenv').config(); require('dotenv').config();
const PORT = process.env.PORT || 8088; const PORT = process.env.PORT || 8088;
app.use(cors()); const loaders = require('./loaders');
app.use(express.json());
app.use(express.urlencoded({ async function start() {
extended: true loaders(app);
}));
const store = new session.MemoryStore(); app.listen(PORT, () => {
app.use(session({ console.log(`Listening on port ${PORT}`);
secret: process.env.EXPRESS_SECRET, });
cookie: { maxAge: 300000000, secure: false }, }
resave: false,
saveUninitialized: false,
store,
}));
const apiRouter = require('./routes/API'); start();
app.use(apiRouter);
app.listen(PORT, () => {
console.log(`Listening on port ${PORT}`);
});
module.exports = app; module.exports = app;

View File

View File

@@ -1,9 +0,0 @@
{
"openapi": "3.0.3",
"info": {
"title": "E-Commerce Project",
"description": "Full Stack Portfolio project built using Postgres, Express, React and TypeScript",
"version": "0.0.1"
},
"paths": {}
}