Skip to content

Bug fixes with dev environment addition #7

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 5 commits into
base: master
Choose a base branch
from
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
project/node_modules
project/yarn.lock
project/package-lock.json
173 changes: 85 additions & 88 deletions project/controllers/employeeController.js
Original file line number Diff line number Diff line change
@@ -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;
module.exports = router;
19 changes: 13 additions & 6 deletions project/models/db.js
Original file line number Diff line number Diff line change
@@ -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');
require("./employee.model");
41 changes: 22 additions & 19 deletions project/models/employee.model.js
Original file line number Diff line number Diff line change
@@ -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);
mongoose.model("Employee", employeeSchema);
8 changes: 7 additions & 1 deletion project/package.json
Original file line number Diff line number Diff line change
@@ -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"
}
}
45 changes: 30 additions & 15 deletions project/server.js
Original file line number Diff line number Diff line change
@@ -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);
app.use("/employee", employeeController);