mongo reposityory
This commit is contained in:
parent
4995182651
commit
20ec2747ae
5 changed files with 268 additions and 49 deletions
|
@ -1,5 +1,9 @@
|
|||
inMemoryWorkshop = []
|
||||
let inMemoryWorkshop;
|
||||
|
||||
function init() {
|
||||
inMemoryWorkshop = [];
|
||||
return Promise.resolve();
|
||||
}
|
||||
|
||||
function getWorkshopList() {
|
||||
return new Promise((resolve, ) => {
|
||||
|
@ -38,13 +42,14 @@ function removeWorkshopByName(name) {
|
|||
})
|
||||
}
|
||||
|
||||
function updateWorkshop(name) {
|
||||
function updateWorkshop(name, description) {
|
||||
return new Promise((resolve, reject) => {
|
||||
reject(new Error("Not implemented"))
|
||||
})
|
||||
}
|
||||
|
||||
module.exports = {
|
||||
init,
|
||||
getWorkshopList,
|
||||
getWorkshopByName,
|
||||
addWorkshop,
|
||||
|
|
98
js/index.js
98
js/index.js
|
@ -1,64 +1,70 @@
|
|||
|
||||
const express = require('express')
|
||||
const app = express()
|
||||
const InMemoryWorkshop = require("./inMemoryWorkshop")
|
||||
const path = require("path")
|
||||
const ejs = require('ejs')
|
||||
var bodyParser = require('body-parser')
|
||||
const repository = require('./inMemoryWorkshop');
|
||||
//const repository = require("./mongoWorkshop");
|
||||
|
||||
app.use(bodyParser.urlencoded({ extended: false }))
|
||||
repository.init().then(() => {
|
||||
|
||||
// set the view engine to ejs
|
||||
app.set('view engine', 'ejs');
|
||||
app.set('views', path.join(__dirname, '..', '/ejs'));
|
||||
app.use(express.static(path.join(__dirname , '..', 'css')));
|
||||
app.use(bodyParser.urlencoded({ extended: false }))
|
||||
|
||||
|
||||
app.get('/', function (req, res) {
|
||||
InMemoryWorkshop.getWorkshopList()
|
||||
.then(workshops => {
|
||||
res.render("index", {
|
||||
workshops: workshops
|
||||
})
|
||||
})
|
||||
})
|
||||
|
||||
app.get('/workshop', function (req, res) {
|
||||
console.log("get")
|
||||
res.render('workshop')
|
||||
})
|
||||
|
||||
app.post('/workshop', function (req, res) {
|
||||
const name = req.body.name
|
||||
const description = req.body.description
|
||||
InMemoryWorkshop.addWorkshop(name, description).then(() => {
|
||||
InMemoryWorkshop.getWorkshopList()
|
||||
// set the view engine to ejs
|
||||
app.set('view engine', 'ejs');
|
||||
app.set('views', path.join(__dirname, '..', '/ejs'));
|
||||
app.use(express.static(path.join(__dirname , '..', 'css')));
|
||||
|
||||
|
||||
app.get('/', function (req, res) {
|
||||
repository.getWorkshopList()
|
||||
.then(workshops => {
|
||||
res.render("index", {
|
||||
workshops: workshops
|
||||
})
|
||||
})
|
||||
})
|
||||
.catch(e =>res.send(e.message))
|
||||
})
|
||||
|
||||
app.get('/workshop/:name', function (req, res) {
|
||||
const workshopName = req.params.name
|
||||
InMemoryWorkshop.getWorkshopByName(workshopName)
|
||||
.then(workshop => {
|
||||
res.render('ejs/workshop', workshop)
|
||||
|
||||
app.get('/workshop', function (req, res) {
|
||||
console.log("get")
|
||||
res.render('workshop')
|
||||
})
|
||||
.catch(e =>ejs.send(e.message))
|
||||
|
||||
app.post('/workshop', function (req, res) {
|
||||
const name = req.body.name
|
||||
const description = req.body.description
|
||||
repository.addWorkshop(name, description).then(() => {
|
||||
repository.getWorkshopList()
|
||||
.then(workshops => {
|
||||
res.render("index", {
|
||||
workshops: workshops
|
||||
})
|
||||
})
|
||||
})
|
||||
.catch(e =>res.send(e.message))
|
||||
})
|
||||
|
||||
app.get('/workshop/:name', function (req, res) {
|
||||
const workshopName = req.params.name
|
||||
repository.getWorkshopByName(workshopName)
|
||||
.then(workshop => {
|
||||
res.render('ejs/workshop', workshop)
|
||||
})
|
||||
.catch(e =>ejs.send(e.message))
|
||||
})
|
||||
|
||||
app.post('/remove-workshop', function (req, res) {
|
||||
res.status(500).send("TODO")
|
||||
})
|
||||
|
||||
app.post('/update-workshop', function(req, res) {
|
||||
res.status(500).send("TODO")
|
||||
})
|
||||
|
||||
app.listen(3000, function () {
|
||||
console.log('Workshop app listening on port 3000!')
|
||||
})
|
||||
|
||||
})
|
||||
|
||||
app.post('/remove-workshop', function (req, res) {
|
||||
res.status(500).send("TODO")
|
||||
})
|
||||
|
||||
app.post('/update-workshop', function(req, res) {
|
||||
res.status(500).send("TODO")
|
||||
})
|
||||
|
||||
app.listen(3000, function () {
|
||||
console.log('Workshop app listening on port 3000!')
|
||||
})
|
||||
|
|
89
js/mongoWorkshop.js
Normal file
89
js/mongoWorkshop.js
Normal file
|
@ -0,0 +1,89 @@
|
|||
const MongoClient = require('mongodb').MongoClient;
|
||||
const url = 'mongodb://localhost:27017';
|
||||
const dbName = 'workshopDatabase';
|
||||
const COLLECTION_NAME = "workshops"
|
||||
let db;
|
||||
|
||||
function init() {
|
||||
return new Promise((resolve, reject) => {
|
||||
MongoClient.connect(url, function(err, client) {
|
||||
if (err) {
|
||||
return reject(err)
|
||||
}
|
||||
console.log("Connected successfully to server");
|
||||
db = client.db(dbName);
|
||||
resolve();
|
||||
});
|
||||
})
|
||||
}
|
||||
|
||||
function getWorkshopList() {
|
||||
return new Promise((resolve, reject) => {
|
||||
const collection = db.collection(COLLECTION_NAME);
|
||||
collection.find({}).toArray(function(err, workshops) {
|
||||
if (err) {
|
||||
return reject(err);
|
||||
}
|
||||
return resolve(workshops)
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
function getWorkshopByName(name) {
|
||||
return new Promise((resolve, reject) => {
|
||||
if (!name) {
|
||||
reject(new Error("name parameter is required"))
|
||||
}
|
||||
const collection = db.collection(COLLECTION_NAME);
|
||||
collection.find({
|
||||
name
|
||||
}).toArray(function(err, workshops) {
|
||||
if (err) {
|
||||
return reject(err);
|
||||
}
|
||||
if (workshops.length > 0) {
|
||||
return resolve(workshops[0])
|
||||
} else {
|
||||
return resolve(null)
|
||||
}
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
function addWorkshop(name, description) {
|
||||
if (!name) {
|
||||
return Promise.reject(new Error("Workshop name required"));
|
||||
}
|
||||
if (!description) {
|
||||
return Promise.reject(new Error("Workshop description required"));
|
||||
}
|
||||
const collection = db.collection(COLLECTION_NAME);
|
||||
return collection.insert({
|
||||
name, description
|
||||
}).then(() => {return})
|
||||
}
|
||||
|
||||
function removeWorkshopByName(name) {
|
||||
const collection = db.collection(COLLECTION_NAME);
|
||||
return collection.deleteMany({
|
||||
name
|
||||
}).then(() => {return})
|
||||
}
|
||||
|
||||
function updateWorkshop(name, description) {
|
||||
const collection = db.collection(COLLECTION_NAME);
|
||||
return collection.updateMany({
|
||||
name
|
||||
}, {
|
||||
description
|
||||
}).then(() => {return})
|
||||
}
|
||||
|
||||
module.exports = {
|
||||
init,
|
||||
getWorkshopList,
|
||||
getWorkshopByName,
|
||||
addWorkshop,
|
||||
removeWorkshopByName,
|
||||
updateWorkshop
|
||||
}
|
117
package-lock.json
generated
117
package-lock.json
generated
|
@ -18,6 +18,15 @@
|
|||
"resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz",
|
||||
"integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI="
|
||||
},
|
||||
"bl": {
|
||||
"version": "2.2.1",
|
||||
"resolved": "https://registry.npmjs.org/bl/-/bl-2.2.1.tgz",
|
||||
"integrity": "sha512-6Pesp1w0DEX1N550i/uGV/TqucVL4AM/pgThFSN/Qq9si1/DF9aIHs1BxD8V/QU0HoeHO6cQRTAuYnLPKq1e4g==",
|
||||
"requires": {
|
||||
"readable-stream": "^2.3.5",
|
||||
"safe-buffer": "^5.1.1"
|
||||
}
|
||||
},
|
||||
"body-parser": {
|
||||
"version": "1.19.0",
|
||||
"resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz",
|
||||
|
@ -35,6 +44,11 @@
|
|||
"type-is": "~1.6.17"
|
||||
}
|
||||
},
|
||||
"bson": {
|
||||
"version": "1.1.5",
|
||||
"resolved": "https://registry.npmjs.org/bson/-/bson-1.1.5.tgz",
|
||||
"integrity": "sha512-kDuEzldR21lHciPQAIulLs1LZlCXdLziXI6Mb/TDkwXhb//UORJNPXgcRs2CuO4H0DcMkpfT3/ySsP3unoZjBg=="
|
||||
},
|
||||
"bytes": {
|
||||
"version": "3.1.0",
|
||||
"resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz",
|
||||
|
@ -63,6 +77,11 @@
|
|||
"resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz",
|
||||
"integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw="
|
||||
},
|
||||
"core-util-is": {
|
||||
"version": "1.0.2",
|
||||
"resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
|
||||
"integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac="
|
||||
},
|
||||
"debug": {
|
||||
"version": "2.6.9",
|
||||
"resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
|
||||
|
@ -71,6 +90,11 @@
|
|||
"ms": "2.0.0"
|
||||
}
|
||||
},
|
||||
"denque": {
|
||||
"version": "1.4.1",
|
||||
"resolved": "https://registry.npmjs.org/denque/-/denque-1.4.1.tgz",
|
||||
"integrity": "sha512-OfzPuSZKGcgr96rf1oODnfjqBFmr1DVoc/TrItj3Ohe0Ah1C5WX5Baquw/9U9KovnQ88EqmJbD66rKYUQYN1tQ=="
|
||||
},
|
||||
"depd": {
|
||||
"version": "1.1.2",
|
||||
"resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz",
|
||||
|
@ -197,11 +221,22 @@
|
|||
"resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.0.tgz",
|
||||
"integrity": "sha512-M4Sjn6N/+O6/IXSJseKqHoFc+5FdGJ22sXqnjTpdZweHK64MzEPAyQZyEU3R/KRv2GLoa7nNtg/C2Ev6m7z+eA=="
|
||||
},
|
||||
"isarray": {
|
||||
"version": "1.0.0",
|
||||
"resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
|
||||
"integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE="
|
||||
},
|
||||
"media-typer": {
|
||||
"version": "0.3.0",
|
||||
"resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz",
|
||||
"integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g="
|
||||
},
|
||||
"memory-pager": {
|
||||
"version": "1.5.0",
|
||||
"resolved": "https://registry.npmjs.org/memory-pager/-/memory-pager-1.5.0.tgz",
|
||||
"integrity": "sha512-ZS4Bp4r/Zoeq6+NLJpP+0Zzm0pR8whtGPf1XExKLJBAczGMnSi3It14OiNCStjQjM6NU1okjQGSxgEZN8eBYKg==",
|
||||
"optional": true
|
||||
},
|
||||
"merge-descriptors": {
|
||||
"version": "1.0.1",
|
||||
"resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz",
|
||||
|
@ -230,6 +265,19 @@
|
|||
"mime-db": "1.40.0"
|
||||
}
|
||||
},
|
||||
"mongodb": {
|
||||
"version": "3.6.2",
|
||||
"resolved": "https://registry.npmjs.org/mongodb/-/mongodb-3.6.2.tgz",
|
||||
"integrity": "sha512-sSZOb04w3HcnrrXC82NEh/YGCmBuRgR+C1hZgmmv4L6dBz4BkRse6Y8/q/neXer9i95fKUBbFi4KgeceXmbsOA==",
|
||||
"requires": {
|
||||
"bl": "^2.2.1",
|
||||
"bson": "^1.1.4",
|
||||
"denque": "^1.4.1",
|
||||
"require_optional": "^1.0.1",
|
||||
"safe-buffer": "^5.1.2",
|
||||
"saslprep": "^1.0.0"
|
||||
}
|
||||
},
|
||||
"ms": {
|
||||
"version": "2.0.0",
|
||||
"resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
|
||||
|
@ -258,6 +306,11 @@
|
|||
"resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz",
|
||||
"integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w="
|
||||
},
|
||||
"process-nextick-args": {
|
||||
"version": "2.0.1",
|
||||
"resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz",
|
||||
"integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag=="
|
||||
},
|
||||
"proxy-addr": {
|
||||
"version": "2.0.5",
|
||||
"resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.5.tgz",
|
||||
|
@ -288,6 +341,34 @@
|
|||
"unpipe": "1.0.0"
|
||||
}
|
||||
},
|
||||
"readable-stream": {
|
||||
"version": "2.3.7",
|
||||
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
|
||||
"integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
|
||||
"requires": {
|
||||
"core-util-is": "~1.0.0",
|
||||
"inherits": "~2.0.3",
|
||||
"isarray": "~1.0.0",
|
||||
"process-nextick-args": "~2.0.0",
|
||||
"safe-buffer": "~5.1.1",
|
||||
"string_decoder": "~1.1.1",
|
||||
"util-deprecate": "~1.0.1"
|
||||
}
|
||||
},
|
||||
"require_optional": {
|
||||
"version": "1.0.1",
|
||||
"resolved": "https://registry.npmjs.org/require_optional/-/require_optional-1.0.1.tgz",
|
||||
"integrity": "sha512-qhM/y57enGWHAe3v/NcwML6a3/vfESLe/sGM2dII+gEO0BpKRUkWZow/tyloNqJyN6kXSl3RyyM8Ll5D/sJP8g==",
|
||||
"requires": {
|
||||
"resolve-from": "^2.0.0",
|
||||
"semver": "^5.1.0"
|
||||
}
|
||||
},
|
||||
"resolve-from": {
|
||||
"version": "2.0.0",
|
||||
"resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-2.0.0.tgz",
|
||||
"integrity": "sha1-lICrIOlP+h2egKgEx+oUdhGWa1c="
|
||||
},
|
||||
"safe-buffer": {
|
||||
"version": "5.1.2",
|
||||
"resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
|
||||
|
@ -298,6 +379,20 @@
|
|||
"resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
|
||||
"integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="
|
||||
},
|
||||
"saslprep": {
|
||||
"version": "1.0.3",
|
||||
"resolved": "https://registry.npmjs.org/saslprep/-/saslprep-1.0.3.tgz",
|
||||
"integrity": "sha512-/MY/PEMbk2SuY5sScONwhUDsV2p77Znkb/q3nSVstq/yQzYJOH/Azh29p9oJLsl3LnQwSvZDKagDGBsBwSooag==",
|
||||
"optional": true,
|
||||
"requires": {
|
||||
"sparse-bitfield": "^3.0.3"
|
||||
}
|
||||
},
|
||||
"semver": {
|
||||
"version": "5.7.1",
|
||||
"resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
|
||||
"integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ=="
|
||||
},
|
||||
"send": {
|
||||
"version": "0.17.1",
|
||||
"resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz",
|
||||
|
@ -341,11 +436,28 @@
|
|||
"resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz",
|
||||
"integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw=="
|
||||
},
|
||||
"sparse-bitfield": {
|
||||
"version": "3.0.3",
|
||||
"resolved": "https://registry.npmjs.org/sparse-bitfield/-/sparse-bitfield-3.0.3.tgz",
|
||||
"integrity": "sha1-/0rm5oZWBWuks+eSqzM004JzyhE=",
|
||||
"optional": true,
|
||||
"requires": {
|
||||
"memory-pager": "^1.0.2"
|
||||
}
|
||||
},
|
||||
"statuses": {
|
||||
"version": "1.5.0",
|
||||
"resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz",
|
||||
"integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow="
|
||||
},
|
||||
"string_decoder": {
|
||||
"version": "1.1.1",
|
||||
"resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
|
||||
"integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
|
||||
"requires": {
|
||||
"safe-buffer": "~5.1.0"
|
||||
}
|
||||
},
|
||||
"toidentifier": {
|
||||
"version": "1.0.0",
|
||||
"resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz",
|
||||
|
@ -365,6 +477,11 @@
|
|||
"resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz",
|
||||
"integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw="
|
||||
},
|
||||
"util-deprecate": {
|
||||
"version": "1.0.2",
|
||||
"resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
|
||||
"integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8="
|
||||
},
|
||||
"utils-merge": {
|
||||
"version": "1.0.1",
|
||||
"resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz",
|
||||
|
|
|
@ -4,6 +4,7 @@
|
|||
"description": "",
|
||||
"main": "index.js",
|
||||
"scripts": {
|
||||
"start": "node js index.js",
|
||||
"test": "echo \"Error: no test specified\" && exit 1"
|
||||
},
|
||||
"author": "",
|
||||
|
@ -11,6 +12,7 @@
|
|||
"dependencies": {
|
||||
"body-parser": "^1.19.0",
|
||||
"ejs": "^2.7.1",
|
||||
"express": "^4.17.1"
|
||||
"express": "^4.17.1",
|
||||
"mongodb": "^3.6.2"
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue