├── README.md
└── project
├── controllers
└── employeeController.js
├── models
├── db.js
└── employee.model.js
├── package-lock.json
├── package.json
├── server.js
└── views
├── employee
├── addOrEdit.hbs
└── list.hbs
└── layouts
└── mainLayout.hbs
/README.md:
--------------------------------------------------------------------------------
1 | # Node.js-Expess-MongoDB-CRUD
2 |
3 | Content discussed :
4 | - Form Design
5 | - Post Form Data into Node.js
6 | - Implemented Form Validation with mongoose model
7 | - Insert, Update and Delete with Node and MongoDB
8 |
9 | ## Get the Code
10 |
11 | ```
12 | $ git clone https://github.com/CodAffection/Node.js-Expess-MongoDB-CRUD.git
13 | $ cd Node.js-Expess-MongoDB-CRUD/project
14 | $ npm install
15 | ```
16 |
17 | ## How it works ?
18 |
19 | :tv: Video tutorial on this same topic
20 | Url : https://youtu.be/voDummz1gO0
21 |
22 |
25 |
26 |
27 | | :bar_chart: | List of Tutorials | | :moneybag: | Support Us |
28 | |--------------------------:|:---------------------|---|---------------------:|:-------------------------------------|
29 | | Angular |http://bit.ly/2KQN9xF | |Paypal | https://goo.gl/bPcyXW |
30 | | Asp.Net Core |http://bit.ly/30fPDMg | |Amazon Affiliate | https://geni.us/JDzpE |
31 | | React |http://bit.ly/325temF | |
32 | | Python |http://bit.ly/2ws4utg | | :point_right: | Follow Us |
33 | | Node.js |https://goo.gl/viJcFs | |Website |http://www.codaffection.com |
34 | | Asp.Net MVC |https://goo.gl/gvjUJ7 | |YouTube |https://www.youtube.com/codaffection |
35 | | Flutter |https://bit.ly/3ggmmJz| |Facebook |https://www.facebook.com/codaffection |
36 | | Web API |https://goo.gl/itVayJ | |Twitter |https://twitter.com/CodAffection |
37 | | MEAN Stack |https://goo.gl/YJPPAH | |
38 | | C# Tutorial |https://goo.gl/s1zJxo | |
39 | | Asp.Net WebForm |https://goo.gl/GXC2aJ | |
40 | | C# WinForm |https://goo.gl/vHS9Hd | |
41 | | MS SQL |https://goo.gl/MLYS9e | |
42 | | Crystal Report |https://goo.gl/5Vou7t | |
43 | | CG Exercises in C Program |https://goo.gl/qEWJCs | |
44 |
45 |
--------------------------------------------------------------------------------
/project/controllers/employeeController.js:
--------------------------------------------------------------------------------
1 | const express = require('express');
2 | var router = express.Router();
3 | const mongoose = require('mongoose');
4 | const Employee = mongoose.model('Employee');
5 |
6 | router.get('/', (req, res) => {
7 | res.render("employee/addOrEdit", {
8 | viewTitle: "Insert Employee"
9 | });
10 | });
11 |
12 | router.post('/', (req, res) => {
13 | if (req.body._id == '')
14 | insertRecord(req, res);
15 | else
16 | updateRecord(req, res);
17 | });
18 |
19 |
20 | function insertRecord(req, res) {
21 | var employee = new Employee();
22 | employee.fullName = req.body.fullName;
23 | employee.email = req.body.email;
24 | employee.mobile = req.body.mobile;
25 | employee.city = req.body.city;
26 | employee.save((err, doc) => {
27 | if (!err)
28 | res.redirect('employee/list');
29 | else {
30 | if (err.name == 'ValidationError') {
31 | handleValidationError(err, req.body);
32 | res.render("employee/addOrEdit", {
33 | viewTitle: "Insert Employee",
34 | employee: req.body
35 | });
36 | }
37 | else
38 | console.log('Error during record insertion : ' + err);
39 | }
40 | });
41 | }
42 |
43 | function updateRecord(req, res) {
44 | Employee.findOneAndUpdate({ _id: req.body._id }, req.body, { new: true }, (err, doc) => {
45 | if (!err) { res.redirect('employee/list'); }
46 | else {
47 | if (err.name == 'ValidationError') {
48 | handleValidationError(err, req.body);
49 | res.render("employee/addOrEdit", {
50 | viewTitle: 'Update Employee',
51 | employee: req.body
52 | });
53 | }
54 | else
55 | console.log('Error during record update : ' + err);
56 | }
57 | });
58 | }
59 |
60 |
61 | router.get('/list', (req, res) => {
62 | Employee.find((err, docs) => {
63 | if (!err) {
64 | res.render("employee/list", {
65 | list: docs
66 | });
67 | }
68 | else {
69 | console.log('Error in retrieving employee list :' + err);
70 | }
71 | });
72 | });
73 |
74 |
75 | function handleValidationError(err, body) {
76 | for (field in err.errors) {
77 | switch (err.errors[field].path) {
78 | case 'fullName':
79 | body['fullNameError'] = err.errors[field].message;
80 | break;
81 | case 'email':
82 | body['emailError'] = err.errors[field].message;
83 | break;
84 | default:
85 | break;
86 | }
87 | }
88 | }
89 |
90 | router.get('/:id', (req, res) => {
91 | Employee.findById(req.params.id, (err, doc) => {
92 | if (!err) {
93 | res.render("employee/addOrEdit", {
94 | viewTitle: "Update Employee",
95 | employee: doc
96 | });
97 | }
98 | });
99 | });
100 |
101 | router.get('/delete/:id', (req, res) => {
102 | Employee.findByIdAndRemove(req.params.id, (err, doc) => {
103 | if (!err) {
104 | res.redirect('/employee/list');
105 | }
106 | else { console.log('Error in employee delete :' + err); }
107 | });
108 | });
109 |
110 | module.exports = router;
--------------------------------------------------------------------------------
/project/models/db.js:
--------------------------------------------------------------------------------
1 | const mongoose = require('mongoose');
2 |
3 | mongoose.connect('mongodb://localhost:27017/EmployeeDB', { useNewUrlParser: true }, (err) => {
4 | if (!err) { console.log('MongoDB Connection Succeeded.') }
5 | else { console.log('Error in DB connection : ' + err) }
6 | });
7 |
8 | require('./employee.model');
--------------------------------------------------------------------------------
/project/models/employee.model.js:
--------------------------------------------------------------------------------
1 | const mongoose = require('mongoose');
2 |
3 | var employeeSchema = new mongoose.Schema({
4 | fullName: {
5 | type: String,
6 | required: 'This field is required.'
7 | },
8 | email: {
9 | type: String
10 | },
11 | mobile: {
12 | type: String
13 | },
14 | city: {
15 | type: String
16 | }
17 | });
18 |
19 | // Custom validation for email
20 | employeeSchema.path('email').validate((val) => {
21 | emailRegex = /^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/;
22 | return emailRegex.test(val);
23 | }, 'Invalid e-mail.');
24 |
25 | mongoose.model('Employee', employeeSchema);
--------------------------------------------------------------------------------
/project/package-lock.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "project",
3 | "version": "1.0.0",
4 | "lockfileVersion": 1,
5 | "requires": true,
6 | "dependencies": {
7 | "accepts": {
8 | "version": "1.3.5",
9 | "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.5.tgz",
10 | "integrity": "sha1-63d99gEXI6OxTopywIBcjoZ0a9I=",
11 | "requires": {
12 | "mime-types": "~2.1.18",
13 | "negotiator": "0.6.1"
14 | }
15 | },
16 | "array-flatten": {
17 | "version": "1.1.1",
18 | "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz",
19 | "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI="
20 | },
21 | "asap": {
22 | "version": "2.0.6",
23 | "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz",
24 | "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY="
25 | },
26 | "async": {
27 | "version": "2.6.1",
28 | "resolved": "https://registry.npmjs.org/async/-/async-2.6.1.tgz",
29 | "integrity": "sha512-fNEiL2+AZt6AlAw/29Cr0UDe4sRAHCpEHh54WMz+Bb7QfNcFw4h3loofyJpLeQs4Yx7yuqu/2dLgM5hKOs6HlQ==",
30 | "requires": {
31 | "lodash": "^4.17.10"
32 | }
33 | },
34 | "balanced-match": {
35 | "version": "1.0.0",
36 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
37 | "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c="
38 | },
39 | "bluebird": {
40 | "version": "3.5.1",
41 | "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.1.tgz",
42 | "integrity": "sha512-MKiLiV+I1AA596t9w1sQJ8jkiSr5+ZKi0WKrYGUn6d1Fx+Ij4tIj+m2WMQSGczs5jZVxV339chE8iwk6F64wjA=="
43 | },
44 | "body-parser": {
45 | "version": "1.18.3",
46 | "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.18.3.tgz",
47 | "integrity": "sha1-WykhmP/dVTs6DyDe0FkrlWlVyLQ=",
48 | "requires": {
49 | "bytes": "3.0.0",
50 | "content-type": "~1.0.4",
51 | "debug": "2.6.9",
52 | "depd": "~1.1.2",
53 | "http-errors": "~1.6.3",
54 | "iconv-lite": "0.4.23",
55 | "on-finished": "~2.3.0",
56 | "qs": "6.5.2",
57 | "raw-body": "2.3.3",
58 | "type-is": "~1.6.16"
59 | }
60 | },
61 | "brace-expansion": {
62 | "version": "1.1.11",
63 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
64 | "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
65 | "requires": {
66 | "balanced-match": "^1.0.0",
67 | "concat-map": "0.0.1"
68 | }
69 | },
70 | "bson": {
71 | "version": "1.0.9",
72 | "resolved": "https://registry.npmjs.org/bson/-/bson-1.0.9.tgz",
73 | "integrity": "sha512-IQX9/h7WdMBIW/q/++tGd+emQr0XMdeZ6icnT/74Xk9fnabWn+gZgpE+9V+gujL3hhJOoNrnDVY7tWdzc7NUTg=="
74 | },
75 | "bytes": {
76 | "version": "3.0.0",
77 | "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz",
78 | "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg="
79 | },
80 | "commander": {
81 | "version": "2.17.1",
82 | "resolved": "https://registry.npmjs.org/commander/-/commander-2.17.1.tgz",
83 | "integrity": "sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg==",
84 | "optional": true
85 | },
86 | "concat-map": {
87 | "version": "0.0.1",
88 | "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
89 | "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s="
90 | },
91 | "content-disposition": {
92 | "version": "0.5.2",
93 | "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz",
94 | "integrity": "sha1-DPaLud318r55YcOoUXjLhdunjLQ="
95 | },
96 | "content-type": {
97 | "version": "1.0.4",
98 | "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz",
99 | "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA=="
100 | },
101 | "cookie": {
102 | "version": "0.3.1",
103 | "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz",
104 | "integrity": "sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s="
105 | },
106 | "cookie-signature": {
107 | "version": "1.0.6",
108 | "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz",
109 | "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw="
110 | },
111 | "debug": {
112 | "version": "2.6.9",
113 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
114 | "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
115 | "requires": {
116 | "ms": "2.0.0"
117 | }
118 | },
119 | "define-properties": {
120 | "version": "1.1.3",
121 | "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz",
122 | "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==",
123 | "requires": {
124 | "object-keys": "^1.0.12"
125 | }
126 | },
127 | "depd": {
128 | "version": "1.1.2",
129 | "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz",
130 | "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak="
131 | },
132 | "destroy": {
133 | "version": "1.0.4",
134 | "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz",
135 | "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA="
136 | },
137 | "ee-first": {
138 | "version": "1.1.1",
139 | "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
140 | "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0="
141 | },
142 | "encodeurl": {
143 | "version": "1.0.2",
144 | "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz",
145 | "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k="
146 | },
147 | "escape-html": {
148 | "version": "1.0.3",
149 | "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
150 | "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg="
151 | },
152 | "etag": {
153 | "version": "1.8.1",
154 | "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz",
155 | "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc="
156 | },
157 | "express": {
158 | "version": "4.16.4",
159 | "resolved": "https://registry.npmjs.org/express/-/express-4.16.4.tgz",
160 | "integrity": "sha512-j12Uuyb4FMrd/qQAm6uCHAkPtO8FDTRJZBDd5D2KOL2eLaz1yUNdUB/NOIyq0iU4q4cFarsUCrnFDPBcnksuOg==",
161 | "requires": {
162 | "accepts": "~1.3.5",
163 | "array-flatten": "1.1.1",
164 | "body-parser": "1.18.3",
165 | "content-disposition": "0.5.2",
166 | "content-type": "~1.0.4",
167 | "cookie": "0.3.1",
168 | "cookie-signature": "1.0.6",
169 | "debug": "2.6.9",
170 | "depd": "~1.1.2",
171 | "encodeurl": "~1.0.2",
172 | "escape-html": "~1.0.3",
173 | "etag": "~1.8.1",
174 | "finalhandler": "1.1.1",
175 | "fresh": "0.5.2",
176 | "merge-descriptors": "1.0.1",
177 | "methods": "~1.1.2",
178 | "on-finished": "~2.3.0",
179 | "parseurl": "~1.3.2",
180 | "path-to-regexp": "0.1.7",
181 | "proxy-addr": "~2.0.4",
182 | "qs": "6.5.2",
183 | "range-parser": "~1.2.0",
184 | "safe-buffer": "5.1.2",
185 | "send": "0.16.2",
186 | "serve-static": "1.13.2",
187 | "setprototypeof": "1.1.0",
188 | "statuses": "~1.4.0",
189 | "type-is": "~1.6.16",
190 | "utils-merge": "1.0.1",
191 | "vary": "~1.1.2"
192 | },
193 | "dependencies": {
194 | "statuses": {
195 | "version": "1.4.0",
196 | "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz",
197 | "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew=="
198 | }
199 | }
200 | },
201 | "express-handlebars": {
202 | "version": "3.0.0",
203 | "resolved": "https://registry.npmjs.org/express-handlebars/-/express-handlebars-3.0.0.tgz",
204 | "integrity": "sha1-gKBwu4GbCeSvLKbQeA91zgXnXC8=",
205 | "requires": {
206 | "glob": "^6.0.4",
207 | "graceful-fs": "^4.1.2",
208 | "handlebars": "^4.0.5",
209 | "object.assign": "^4.0.3",
210 | "promise": "^7.0.0"
211 | }
212 | },
213 | "finalhandler": {
214 | "version": "1.1.1",
215 | "resolved": "http://registry.npmjs.org/finalhandler/-/finalhandler-1.1.1.tgz",
216 | "integrity": "sha512-Y1GUDo39ez4aHAw7MysnUD5JzYX+WaIj8I57kO3aEPT1fFRL4sr7mjei97FgnwhAyyzRYmQZaTHb2+9uZ1dPtg==",
217 | "requires": {
218 | "debug": "2.6.9",
219 | "encodeurl": "~1.0.2",
220 | "escape-html": "~1.0.3",
221 | "on-finished": "~2.3.0",
222 | "parseurl": "~1.3.2",
223 | "statuses": "~1.4.0",
224 | "unpipe": "~1.0.0"
225 | },
226 | "dependencies": {
227 | "statuses": {
228 | "version": "1.4.0",
229 | "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz",
230 | "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew=="
231 | }
232 | }
233 | },
234 | "forwarded": {
235 | "version": "0.1.2",
236 | "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz",
237 | "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ="
238 | },
239 | "fresh": {
240 | "version": "0.5.2",
241 | "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz",
242 | "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac="
243 | },
244 | "function-bind": {
245 | "version": "1.1.1",
246 | "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
247 | "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A=="
248 | },
249 | "glob": {
250 | "version": "6.0.4",
251 | "resolved": "https://registry.npmjs.org/glob/-/glob-6.0.4.tgz",
252 | "integrity": "sha1-DwiGD2oVUSey+t1PnOJLGqtuTSI=",
253 | "requires": {
254 | "inflight": "^1.0.4",
255 | "inherits": "2",
256 | "minimatch": "2 || 3",
257 | "once": "^1.3.0",
258 | "path-is-absolute": "^1.0.0"
259 | }
260 | },
261 | "graceful-fs": {
262 | "version": "4.1.11",
263 | "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz",
264 | "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg="
265 | },
266 | "handlebars": {
267 | "version": "4.0.12",
268 | "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.0.12.tgz",
269 | "integrity": "sha512-RhmTekP+FZL+XNhwS1Wf+bTTZpdLougwt5pcgA1tuz6Jcx0fpH/7z0qd71RKnZHBCxIRBHfBOnio4gViPemNzA==",
270 | "requires": {
271 | "async": "^2.5.0",
272 | "optimist": "^0.6.1",
273 | "source-map": "^0.6.1",
274 | "uglify-js": "^3.1.4"
275 | }
276 | },
277 | "has-symbols": {
278 | "version": "1.0.0",
279 | "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.0.tgz",
280 | "integrity": "sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q="
281 | },
282 | "http-errors": {
283 | "version": "1.6.3",
284 | "resolved": "http://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz",
285 | "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=",
286 | "requires": {
287 | "depd": "~1.1.2",
288 | "inherits": "2.0.3",
289 | "setprototypeof": "1.1.0",
290 | "statuses": ">= 1.4.0 < 2"
291 | }
292 | },
293 | "iconv-lite": {
294 | "version": "0.4.23",
295 | "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.23.tgz",
296 | "integrity": "sha512-neyTUVFtahjf0mB3dZT77u+8O0QB89jFdnBkd5P1JgYPbPaia3gXXOVL2fq8VyU2gMMD7SaN7QukTB/pmXYvDA==",
297 | "requires": {
298 | "safer-buffer": ">= 2.1.2 < 3"
299 | }
300 | },
301 | "inflight": {
302 | "version": "1.0.6",
303 | "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
304 | "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
305 | "requires": {
306 | "once": "^1.3.0",
307 | "wrappy": "1"
308 | }
309 | },
310 | "inherits": {
311 | "version": "2.0.3",
312 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
313 | "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4="
314 | },
315 | "ipaddr.js": {
316 | "version": "1.8.0",
317 | "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.8.0.tgz",
318 | "integrity": "sha1-6qM9bd16zo9/b+DJygRA5wZzix4="
319 | },
320 | "kareem": {
321 | "version": "2.3.0",
322 | "resolved": "https://registry.npmjs.org/kareem/-/kareem-2.3.0.tgz",
323 | "integrity": "sha512-6hHxsp9e6zQU8nXsP+02HGWXwTkOEw6IROhF2ZA28cYbUk4eJ6QbtZvdqZOdD9YPKghG3apk5eOCvs+tLl3lRg=="
324 | },
325 | "lodash": {
326 | "version": "4.17.11",
327 | "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz",
328 | "integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg=="
329 | },
330 | "lodash.get": {
331 | "version": "4.4.2",
332 | "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz",
333 | "integrity": "sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk="
334 | },
335 | "media-typer": {
336 | "version": "0.3.0",
337 | "resolved": "http://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz",
338 | "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g="
339 | },
340 | "memory-pager": {
341 | "version": "1.1.0",
342 | "resolved": "https://registry.npmjs.org/memory-pager/-/memory-pager-1.1.0.tgz",
343 | "integrity": "sha512-Mf9OHV/Y7h6YWDxTzX/b4ZZ4oh9NSXblQL8dtPCOomOtZciEHxePR78+uHFLLlsk01A6jVHhHsQZZ/WcIPpnzg==",
344 | "optional": true
345 | },
346 | "merge-descriptors": {
347 | "version": "1.0.1",
348 | "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz",
349 | "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E="
350 | },
351 | "methods": {
352 | "version": "1.1.2",
353 | "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz",
354 | "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4="
355 | },
356 | "mime": {
357 | "version": "1.4.1",
358 | "resolved": "https://registry.npmjs.org/mime/-/mime-1.4.1.tgz",
359 | "integrity": "sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ=="
360 | },
361 | "mime-db": {
362 | "version": "1.37.0",
363 | "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.37.0.tgz",
364 | "integrity": "sha512-R3C4db6bgQhlIhPU48fUtdVmKnflq+hRdad7IyKhtFj06VPNVdk2RhiYL3UjQIlso8L+YxAtFkobT0VK+S/ybg=="
365 | },
366 | "mime-types": {
367 | "version": "2.1.21",
368 | "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.21.tgz",
369 | "integrity": "sha512-3iL6DbwpyLzjR3xHSFNFeb9Nz/M8WDkX33t1GFQnFOllWk8pOrh/LSrB5OXlnlW5P9LH73X6loW/eogc+F5lJg==",
370 | "requires": {
371 | "mime-db": "~1.37.0"
372 | }
373 | },
374 | "minimatch": {
375 | "version": "3.0.4",
376 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
377 | "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
378 | "requires": {
379 | "brace-expansion": "^1.1.7"
380 | }
381 | },
382 | "minimist": {
383 | "version": "0.0.10",
384 | "resolved": "http://registry.npmjs.org/minimist/-/minimist-0.0.10.tgz",
385 | "integrity": "sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8="
386 | },
387 | "mongodb": {
388 | "version": "3.1.6",
389 | "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-3.1.6.tgz",
390 | "integrity": "sha512-E5QJuXQoMlT7KyCYqNNMfAkhfQD79AT4F8Xd+6x37OX+8BL17GyXyWvfm6wuyx4wnzCCPoCSLeMeUN2S7dU9yw==",
391 | "requires": {
392 | "mongodb-core": "3.1.5",
393 | "safe-buffer": "^5.1.2"
394 | }
395 | },
396 | "mongodb-core": {
397 | "version": "3.1.5",
398 | "resolved": "https://registry.npmjs.org/mongodb-core/-/mongodb-core-3.1.5.tgz",
399 | "integrity": "sha512-emT/tM4ZBinqd6RZok+EzDdtN4LjYJIckv71qQVOEFmvXgT5cperZegVmTgox/1cx4XQu6LJ5ZuIwipP/eKdQg==",
400 | "requires": {
401 | "bson": "^1.1.0",
402 | "require_optional": "^1.0.1",
403 | "safe-buffer": "^5.1.2",
404 | "saslprep": "^1.0.0"
405 | },
406 | "dependencies": {
407 | "bson": {
408 | "version": "1.1.0",
409 | "resolved": "https://registry.npmjs.org/bson/-/bson-1.1.0.tgz",
410 | "integrity": "sha512-9Aeai9TacfNtWXOYarkFJRW2CWo+dRon+fuLZYJmvLV3+MiUp0bEI6IAZfXEIg7/Pl/7IWlLaDnhzTsD81etQA=="
411 | }
412 | }
413 | },
414 | "mongoose": {
415 | "version": "5.3.4",
416 | "resolved": "https://registry.npmjs.org/mongoose/-/mongoose-5.3.4.tgz",
417 | "integrity": "sha512-DIUWOyYgZv2zGi/BoFEaFiaCVuDonnzGhW3cnc3JFjBScYn6z24tS2j3VB0dtMoX8FFjxmmMVnlmHPEIbV4PKA==",
418 | "requires": {
419 | "async": "2.6.1",
420 | "bson": "~1.0.5",
421 | "kareem": "2.3.0",
422 | "lodash.get": "4.4.2",
423 | "mongodb": "3.1.6",
424 | "mongodb-core": "3.1.5",
425 | "mongoose-legacy-pluralize": "1.0.2",
426 | "mpath": "0.5.1",
427 | "mquery": "3.2.0",
428 | "ms": "2.0.0",
429 | "regexp-clone": "0.0.1",
430 | "safe-buffer": "5.1.2",
431 | "sliced": "1.0.1"
432 | }
433 | },
434 | "mongoose-legacy-pluralize": {
435 | "version": "1.0.2",
436 | "resolved": "https://registry.npmjs.org/mongoose-legacy-pluralize/-/mongoose-legacy-pluralize-1.0.2.tgz",
437 | "integrity": "sha512-Yo/7qQU4/EyIS8YDFSeenIvXxZN+ld7YdV9LqFVQJzTLye8unujAWPZ4NWKfFA+RNjh+wvTWKY9Z3E5XM6ZZiQ=="
438 | },
439 | "mpath": {
440 | "version": "0.5.1",
441 | "resolved": "https://registry.npmjs.org/mpath/-/mpath-0.5.1.tgz",
442 | "integrity": "sha512-H8OVQ+QEz82sch4wbODFOz+3YQ61FYz/z3eJ5pIdbMEaUzDqA268Wd+Vt4Paw9TJfvDgVKaayC0gBzMIw2jhsg=="
443 | },
444 | "mquery": {
445 | "version": "3.2.0",
446 | "resolved": "https://registry.npmjs.org/mquery/-/mquery-3.2.0.tgz",
447 | "integrity": "sha512-qPJcdK/yqcbQiKoemAt62Y0BAc0fTEKo1IThodBD+O5meQRJT/2HSe5QpBNwaa4CjskoGrYWsEyjkqgiE0qjhg==",
448 | "requires": {
449 | "bluebird": "3.5.1",
450 | "debug": "3.1.0",
451 | "regexp-clone": "0.0.1",
452 | "safe-buffer": "5.1.2",
453 | "sliced": "1.0.1"
454 | },
455 | "dependencies": {
456 | "debug": {
457 | "version": "3.1.0",
458 | "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz",
459 | "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==",
460 | "requires": {
461 | "ms": "2.0.0"
462 | }
463 | }
464 | }
465 | },
466 | "ms": {
467 | "version": "2.0.0",
468 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
469 | "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
470 | },
471 | "negotiator": {
472 | "version": "0.6.1",
473 | "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.1.tgz",
474 | "integrity": "sha1-KzJxhOiZIQEXeyhWP7XnECrNDKk="
475 | },
476 | "object-keys": {
477 | "version": "1.0.12",
478 | "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.0.12.tgz",
479 | "integrity": "sha512-FTMyFUm2wBcGHnH2eXmz7tC6IwlqQZ6mVZ+6dm6vZ4IQIHjs6FdNsQBuKGPuUUUY6NfJw2PshC08Tn6LzLDOag=="
480 | },
481 | "object.assign": {
482 | "version": "4.1.0",
483 | "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz",
484 | "integrity": "sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==",
485 | "requires": {
486 | "define-properties": "^1.1.2",
487 | "function-bind": "^1.1.1",
488 | "has-symbols": "^1.0.0",
489 | "object-keys": "^1.0.11"
490 | }
491 | },
492 | "on-finished": {
493 | "version": "2.3.0",
494 | "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz",
495 | "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=",
496 | "requires": {
497 | "ee-first": "1.1.1"
498 | }
499 | },
500 | "once": {
501 | "version": "1.4.0",
502 | "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
503 | "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
504 | "requires": {
505 | "wrappy": "1"
506 | }
507 | },
508 | "optimist": {
509 | "version": "0.6.1",
510 | "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz",
511 | "integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=",
512 | "requires": {
513 | "minimist": "~0.0.1",
514 | "wordwrap": "~0.0.2"
515 | }
516 | },
517 | "parseurl": {
518 | "version": "1.3.2",
519 | "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.2.tgz",
520 | "integrity": "sha1-/CidTtiZMRlGDBViUyYs3I3mW/M="
521 | },
522 | "path-is-absolute": {
523 | "version": "1.0.1",
524 | "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
525 | "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18="
526 | },
527 | "path-to-regexp": {
528 | "version": "0.1.7",
529 | "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz",
530 | "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w="
531 | },
532 | "promise": {
533 | "version": "7.3.1",
534 | "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz",
535 | "integrity": "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==",
536 | "requires": {
537 | "asap": "~2.0.3"
538 | }
539 | },
540 | "proxy-addr": {
541 | "version": "2.0.4",
542 | "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.4.tgz",
543 | "integrity": "sha512-5erio2h9jp5CHGwcybmxmVqHmnCBZeewlfJ0pex+UW7Qny7OOZXTtH56TGNyBizkgiOwhJtMKrVzDTeKcySZwA==",
544 | "requires": {
545 | "forwarded": "~0.1.2",
546 | "ipaddr.js": "1.8.0"
547 | }
548 | },
549 | "qs": {
550 | "version": "6.5.2",
551 | "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz",
552 | "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA=="
553 | },
554 | "range-parser": {
555 | "version": "1.2.0",
556 | "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz",
557 | "integrity": "sha1-9JvmtIeJTdxA3MlKMi9hEJLgDV4="
558 | },
559 | "raw-body": {
560 | "version": "2.3.3",
561 | "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.3.3.tgz",
562 | "integrity": "sha512-9esiElv1BrZoI3rCDuOuKCBRbuApGGaDPQfjSflGxdy4oyzqghxu6klEkkVIvBje+FF0BX9coEv8KqW6X/7njw==",
563 | "requires": {
564 | "bytes": "3.0.0",
565 | "http-errors": "1.6.3",
566 | "iconv-lite": "0.4.23",
567 | "unpipe": "1.0.0"
568 | }
569 | },
570 | "regexp-clone": {
571 | "version": "0.0.1",
572 | "resolved": "https://registry.npmjs.org/regexp-clone/-/regexp-clone-0.0.1.tgz",
573 | "integrity": "sha1-p8LgmJH9vzj7sQ03b7cwA+aKxYk="
574 | },
575 | "require_optional": {
576 | "version": "1.0.1",
577 | "resolved": "https://registry.npmjs.org/require_optional/-/require_optional-1.0.1.tgz",
578 | "integrity": "sha512-qhM/y57enGWHAe3v/NcwML6a3/vfESLe/sGM2dII+gEO0BpKRUkWZow/tyloNqJyN6kXSl3RyyM8Ll5D/sJP8g==",
579 | "requires": {
580 | "resolve-from": "^2.0.0",
581 | "semver": "^5.1.0"
582 | }
583 | },
584 | "resolve-from": {
585 | "version": "2.0.0",
586 | "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-2.0.0.tgz",
587 | "integrity": "sha1-lICrIOlP+h2egKgEx+oUdhGWa1c="
588 | },
589 | "safe-buffer": {
590 | "version": "5.1.2",
591 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
592 | "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
593 | },
594 | "safer-buffer": {
595 | "version": "2.1.2",
596 | "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
597 | "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="
598 | },
599 | "saslprep": {
600 | "version": "1.0.2",
601 | "resolved": "https://registry.npmjs.org/saslprep/-/saslprep-1.0.2.tgz",
602 | "integrity": "sha512-4cDsYuAjXssUSjxHKRe4DTZC0agDwsCqcMqtJAQPzC74nJ7LfAJflAtC1Zed5hMzEQKj82d3tuzqdGNRsLJ4Gw==",
603 | "optional": true,
604 | "requires": {
605 | "sparse-bitfield": "^3.0.3"
606 | }
607 | },
608 | "semver": {
609 | "version": "5.6.0",
610 | "resolved": "https://registry.npmjs.org/semver/-/semver-5.6.0.tgz",
611 | "integrity": "sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg=="
612 | },
613 | "send": {
614 | "version": "0.16.2",
615 | "resolved": "https://registry.npmjs.org/send/-/send-0.16.2.tgz",
616 | "integrity": "sha512-E64YFPUssFHEFBvpbbjr44NCLtI1AohxQ8ZSiJjQLskAdKuriYEP6VyGEsRDH8ScozGpkaX1BGvhanqCwkcEZw==",
617 | "requires": {
618 | "debug": "2.6.9",
619 | "depd": "~1.1.2",
620 | "destroy": "~1.0.4",
621 | "encodeurl": "~1.0.2",
622 | "escape-html": "~1.0.3",
623 | "etag": "~1.8.1",
624 | "fresh": "0.5.2",
625 | "http-errors": "~1.6.2",
626 | "mime": "1.4.1",
627 | "ms": "2.0.0",
628 | "on-finished": "~2.3.0",
629 | "range-parser": "~1.2.0",
630 | "statuses": "~1.4.0"
631 | },
632 | "dependencies": {
633 | "statuses": {
634 | "version": "1.4.0",
635 | "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz",
636 | "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew=="
637 | }
638 | }
639 | },
640 | "serve-static": {
641 | "version": "1.13.2",
642 | "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.13.2.tgz",
643 | "integrity": "sha512-p/tdJrO4U387R9oMjb1oj7qSMaMfmOyd4j9hOFoxZe2baQszgHcSWjuya/CiT5kgZZKRudHNOA0pYXOl8rQ5nw==",
644 | "requires": {
645 | "encodeurl": "~1.0.2",
646 | "escape-html": "~1.0.3",
647 | "parseurl": "~1.3.2",
648 | "send": "0.16.2"
649 | }
650 | },
651 | "setprototypeof": {
652 | "version": "1.1.0",
653 | "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz",
654 | "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ=="
655 | },
656 | "sliced": {
657 | "version": "1.0.1",
658 | "resolved": "https://registry.npmjs.org/sliced/-/sliced-1.0.1.tgz",
659 | "integrity": "sha1-CzpmK10Ewxd7GSa+qCsD+Dei70E="
660 | },
661 | "source-map": {
662 | "version": "0.6.1",
663 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
664 | "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="
665 | },
666 | "sparse-bitfield": {
667 | "version": "3.0.3",
668 | "resolved": "https://registry.npmjs.org/sparse-bitfield/-/sparse-bitfield-3.0.3.tgz",
669 | "integrity": "sha1-/0rm5oZWBWuks+eSqzM004JzyhE=",
670 | "optional": true,
671 | "requires": {
672 | "memory-pager": "^1.0.2"
673 | }
674 | },
675 | "statuses": {
676 | "version": "1.5.0",
677 | "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz",
678 | "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow="
679 | },
680 | "type-is": {
681 | "version": "1.6.16",
682 | "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.16.tgz",
683 | "integrity": "sha512-HRkVv/5qY2G6I8iab9cI7v1bOIdhm94dVjQCPFElW9W+3GeDOSHmy2EBYe4VTApuzolPcmgFTN3ftVJRKR2J9Q==",
684 | "requires": {
685 | "media-typer": "0.3.0",
686 | "mime-types": "~2.1.18"
687 | }
688 | },
689 | "uglify-js": {
690 | "version": "3.4.9",
691 | "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.4.9.tgz",
692 | "integrity": "sha512-8CJsbKOtEbnJsTyv6LE6m6ZKniqMiFWmm9sRbopbkGs3gMPPfd3Fh8iIA4Ykv5MgaTbqHr4BaoGLJLZNhsrW1Q==",
693 | "optional": true,
694 | "requires": {
695 | "commander": "~2.17.1",
696 | "source-map": "~0.6.1"
697 | }
698 | },
699 | "unpipe": {
700 | "version": "1.0.0",
701 | "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz",
702 | "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw="
703 | },
704 | "utils-merge": {
705 | "version": "1.0.1",
706 | "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz",
707 | "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM="
708 | },
709 | "vary": {
710 | "version": "1.1.2",
711 | "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz",
712 | "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw="
713 | },
714 | "wordwrap": {
715 | "version": "0.0.3",
716 | "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz",
717 | "integrity": "sha1-o9XabNXAvAAI03I0u68b7WMFkQc="
718 | },
719 | "wrappy": {
720 | "version": "1.0.2",
721 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
722 | "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8="
723 | }
724 | }
725 | }
726 |
--------------------------------------------------------------------------------
/project/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "project",
3 | "version": "1.0.0",
4 | "description": "",
5 | "main": "server.js",
6 | "scripts": {
7 | "test": "echo \"Error: no test specified\" && exit 1"
8 | },
9 | "author": "",
10 | "license": "ISC",
11 | "dependencies": {
12 | "body-parser": "^1.18.3",
13 | "express": "^4.16.4",
14 | "express-handlebars": "^3.0.0",
15 | "mongoose": "^5.3.4"
16 | }
17 | }
18 |
--------------------------------------------------------------------------------
/project/server.js:
--------------------------------------------------------------------------------
1 | require('./models/db');
2 |
3 | const express = require('express');
4 | const path = require('path');
5 | const exphbs = require('express-handlebars');
6 | const bodyparser = require('body-parser');
7 |
8 | const employeeController = require('./controllers/employeeController');
9 |
10 | var app = express();
11 | app.use(bodyparser.urlencoded({
12 | extended: true
13 | }));
14 | app.use(bodyparser.json());
15 | app.set('views', path.join(__dirname, '/views/'));
16 | app.engine('hbs', exphbs({ extname: 'hbs', defaultLayout: 'mainLayout', layoutsDir: __dirname + '/views/layouts/' }));
17 | app.set('view engine', 'hbs');
18 |
19 | app.listen(3000, () => {
20 | console.log('Express server started at port : 3000');
21 | });
22 |
23 | app.use('/employee', employeeController);
--------------------------------------------------------------------------------
/project/views/employee/addOrEdit.hbs:
--------------------------------------------------------------------------------
1 |