diff --git a/.gitignore b/.gitignore new file mode 100644 index 00000000..5c9b96a2 --- /dev/null +++ b/.gitignore @@ -0,0 +1,3 @@ +project/node_modules +project/yarn.lock +project/package-lock.json diff --git a/project/controllers/employeeController.js b/project/controllers/employeeController.js index c7ab3c24..0bac06c5 100644 --- a/project/controllers/employeeController.js +++ b/project/controllers/employeeController.js @@ -1,110 +1,107 @@ -const express = require('express'); +const express = require("express"); var router = express.Router(); -const mongoose = require('mongoose'); -const Employee = mongoose.model('Employee'); +const mongoose = require("mongoose"); +const Employee = mongoose.model("Employee"); -router.get('/', (req, res) => { - res.render("employee/addOrEdit", { - viewTitle: "Insert Employee" - }); +router.get("/", (req, res) => { + res.render("employee/addOrEdit", { + viewTitle: "Insert Employee", + }); }); -router.post('/', (req, res) => { - if (req.body._id == '') - insertRecord(req, res); - else - updateRecord(req, res); +router.post("/", (req, res) => { + if (req.body._id == "") insertRecord(req, res); + else updateRecord(req, res); }); - function insertRecord(req, res) { - var employee = new Employee(); - employee.fullName = req.body.fullName; - employee.email = req.body.email; - employee.mobile = req.body.mobile; - employee.city = req.body.city; - employee.save((err, doc) => { - if (!err) - res.redirect('employee/list'); - else { - if (err.name == 'ValidationError') { - handleValidationError(err, req.body); - res.render("employee/addOrEdit", { - viewTitle: "Insert Employee", - employee: req.body - }); - } - else - console.log('Error during record insertion : ' + err); - } - }); + var employee = new Employee(); + employee.fullName = req.body.fullName; + employee.email = req.body.email; + employee.mobile = req.body.mobile; + employee.city = req.body.city; + console.log(req.body); + employee.save((err, doc) => { + if (!err) res.redirect("employee/list"); + else { + if (err.name == "ValidationError") { + handleValidationError(err, req.body); + res.render("employee/addOrEdit", { + viewTitle: "Insert Employee", + employee: req.body, + }); + } else console.log("Error during record insertion : " + err); + } + }); } function updateRecord(req, res) { - Employee.findOneAndUpdate({ _id: req.body._id }, req.body, { new: true }, (err, doc) => { - if (!err) { res.redirect('employee/list'); } - else { - if (err.name == 'ValidationError') { - handleValidationError(err, req.body); - res.render("employee/addOrEdit", { - viewTitle: 'Update Employee', - employee: req.body - }); - } - else - console.log('Error during record update : ' + err); - } - }); + Employee.findOneAndUpdate( + { _id: req.body._id }, + req.body, + { new: true }, + (err, doc) => { + if (!err) { + res.redirect("employee/list"); + } else { + if (err.name == "ValidationError") { + handleValidationError(err, req.body); + res.render("employee/addOrEdit", { + viewTitle: "Update Employee", + employee: req.body, + }); + } else console.log("Error during record update : " + err); + } + } + ); } - -router.get('/list', (req, res) => { - Employee.find((err, docs) => { - if (!err) { - res.render("employee/list", { - list: docs - }); - } - else { - console.log('Error in retrieving employee list :' + err); - } - }); +router.get("/list", (req, res) => { + Employee.find((err, docs) => { + if (!err) { + res.render("employee/list", { + list: docs, + }); + } else { + console.log("Error in retrieving employee list :" + err); + } + }); }); - function handleValidationError(err, body) { - for (field in err.errors) { - switch (err.errors[field].path) { - case 'fullName': - body['fullNameError'] = err.errors[field].message; - break; - case 'email': - body['emailError'] = err.errors[field].message; - break; - default: - break; - } + for (field in err.errors) { + switch (err.errors[field].path) { + case "fullName": + body["fullNameError"] = err.errors[field].message; + break; + case "email": + body["emailError"] = err.errors[field].message; + break; + default: + break; } + } } -router.get('/:id', (req, res) => { - Employee.findById(req.params.id, (err, doc) => { - if (!err) { - res.render("employee/addOrEdit", { - viewTitle: "Update Employee", - employee: doc - }); - } - }); +router.get("/:id", (req, res) => { + Employee.findById(req.params.id, (err, doc) => { + if (!err) { + res.render("employee/addOrEdit", { + viewTitle: "Update Employee", + employee: doc, + }); + } + }); }); -router.get('/delete/:id', (req, res) => { - Employee.findByIdAndRemove(req.params.id, (err, doc) => { - if (!err) { - res.redirect('/employee/list'); - } - else { console.log('Error in employee delete :' + err); } - }); +router.get("/delete/:id", (req, res) => { + Employee.findByIdAndRemove(req.params.id, (err, doc) => { + if (!err) { + res.redirect("/employee/list"); + } else { + console.log("Error in employee delete :" + err); + } + }); }); -module.exports = router; \ No newline at end of file +module.exports = router; diff --git a/project/models/db.js b/project/models/db.js index 0c133dc3..eba18f9e 100644 --- a/project/models/db.js +++ b/project/models/db.js @@ -1,8 +1,15 @@ -const mongoose = require('mongoose'); +const mongoose = require("mongoose"); -mongoose.connect('mongodb://localhost:27017/EmployeeDB', { useNewUrlParser: true }, (err) => { - if (!err) { console.log('MongoDB Connection Succeeded.') } - else { console.log('Error in DB connection : ' + err) } -}); +mongoose.connect( + "mongodb://localhost:27017/EmployeeDB", + { useNewUrlParser: true }, + (err) => { + if (!err) { + console.log("MongoDB Connection Succeeded."); + } else { + console.log("Error in DB connection : " + err); + } + } +); -require('./employee.model'); \ No newline at end of file +require("./employee.model"); diff --git a/project/models/employee.model.js b/project/models/employee.model.js index 506d760e..8ba8e011 100644 --- a/project/models/employee.model.js +++ b/project/models/employee.model.js @@ -1,25 +1,28 @@ -const mongoose = require('mongoose'); +const mongoose = require("mongoose"); var employeeSchema = new mongoose.Schema({ - fullName: { - type: String, - required: 'This field is required.' - }, - email: { - type: String - }, - mobile: { - type: String - }, - city: { - type: String - } + fullName: { + type: String, + required: "This field is required.", + }, + email: { + type: String, + }, + mobile: { + type: String, + }, + city: { + type: String, + }, + password: { + type: String, + }, }); // Custom validation for email -employeeSchema.path('email').validate((val) => { - 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,}))$/; - return emailRegex.test(val); -}, 'Invalid e-mail.'); +employeeSchema.path("email").validate((val) => { + 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,}))$/; + return emailRegex.test(val); +}, "Invalid e-mail."); -mongoose.model('Employee', employeeSchema); \ No newline at end of file +mongoose.model("Employee", employeeSchema); diff --git a/project/package.json b/project/package.json index 595dcb8f..bfa29501 100644 --- a/project/package.json +++ b/project/package.json @@ -4,14 +4,20 @@ "description": "", "main": "server.js", "scripts": { - "test": "echo \"Error: no test specified\" && exit 1" + "test": "echo \"Error: no test specified\" && exit 1", + "dev": "nodemon" }, "author": "", "license": "ISC", "dependencies": { + "@handlebars/allow-prototype-access": "^1.0.3", "body-parser": "^1.18.3", "express": "^4.16.4", "express-handlebars": "^3.0.0", "mongoose": "^5.3.4" + }, + "devDependencies": { + "handlebars": "^4.7.6", + "nodemon": "^2.0.6" } } diff --git a/project/server.js b/project/server.js index 2a78978b..0cd02bc5 100644 --- a/project/server.js +++ b/project/server.js @@ -1,23 +1,38 @@ -require('./models/db'); +require("./models/db"); -const express = require('express'); -const path = require('path'); -const exphbs = require('express-handlebars'); -const bodyparser = require('body-parser'); +const express = require("express"); +const path = require("path"); +const exphbs = require("express-handlebars"); +const Handlebars = require("handlebars"); +const bodyparser = require("body-parser"); +const { + allowInsecurePrototypeAccess, +} = require("@handlebars/allow-prototype-access"); -const employeeController = require('./controllers/employeeController'); +const employeeController = require("./controllers/employeeController"); var app = express(); -app.use(bodyparser.urlencoded({ - extended: true -})); +app.use( + bodyparser.urlencoded({ + extended: true, + }) +); app.use(bodyparser.json()); -app.set('views', path.join(__dirname, '/views/')); -app.engine('hbs', exphbs({ extname: 'hbs', defaultLayout: 'mainLayout', layoutsDir: __dirname + '/views/layouts/' })); -app.set('view engine', 'hbs'); +app.set("views", path.join(__dirname, "/views/")); +app.engine( + "hbs", + exphbs({ + extname: "hbs", + defaultLayout: "mainLayout", + layoutsDir: __dirname + "/views/layouts/", + handlebars: allowInsecurePrototypeAccess(Handlebars), + }) +); +app.set("view engine", "hbs"); -app.listen(3000, () => { - console.log('Express server started at port : 3000'); +const PORT = process.env.PORT || 3000; +app.listen(PORT, () => { + console.log("Express server started at port : " + PORT); }); -app.use('/employee', employeeController); \ No newline at end of file +app.use("/employee", employeeController);