Repository: CodAffection/Node.js-Expess-MongoDB-CRUD
Branch: master
Commit: 74a11aee717b
Files: 9
Total size: 9.9 KB
Directory structure:
gitextract_p4fz5p5v/
├── README.md
└── project/
├── controllers/
│ └── employeeController.js
├── models/
│ ├── db.js
│ └── employee.model.js
├── package.json
├── server.js
└── views/
├── employee/
│ ├── addOrEdit.hbs
│ └── list.hbs
└── layouts/
└── mainLayout.hbs
================================================
FILE CONTENTS
================================================
================================================
FILE: README.md
================================================
# Node.js-Expess-MongoDB-CRUD
Content discussed :
- Form Design
- Post Form Data into Node.js
- Implemented Form Validation with mongoose model
- Insert, Update and Delete with Node and MongoDB
## Get the Code
```
$ git clone https://github.com/CodAffection/Node.js-Expess-MongoDB-CRUD.git
$ cd Node.js-Expess-MongoDB-CRUD/project
$ npm install
```
## How it works ?
:tv: Video tutorial on this same topic
Url : https://youtu.be/voDummz1gO0
| :bar_chart: | List of Tutorials | | :moneybag: | Support Us |
|--------------------------:|:---------------------|---|---------------------:|:-------------------------------------|
| Angular |http://bit.ly/2KQN9xF | |Paypal | https://goo.gl/bPcyXW |
| Asp.Net Core |http://bit.ly/30fPDMg | |Amazon Affiliate | https://geni.us/JDzpE |
| React |http://bit.ly/325temF | |
| Python |http://bit.ly/2ws4utg | | :point_right: | Follow Us |
| Node.js |https://goo.gl/viJcFs | |Website |http://www.codaffection.com |
| Asp.Net MVC |https://goo.gl/gvjUJ7 | |YouTube |https://www.youtube.com/codaffection |
| Flutter |https://bit.ly/3ggmmJz| |Facebook |https://www.facebook.com/codaffection |
| Web API |https://goo.gl/itVayJ | |Twitter |https://twitter.com/CodAffection |
| MEAN Stack |https://goo.gl/YJPPAH | |
| C# Tutorial |https://goo.gl/s1zJxo | |
| Asp.Net WebForm |https://goo.gl/GXC2aJ | |
| C# WinForm |https://goo.gl/vHS9Hd | |
| MS SQL |https://goo.gl/MLYS9e | |
| Crystal Report |https://goo.gl/5Vou7t | |
| CG Exercises in C Program |https://goo.gl/qEWJCs | |
================================================
FILE: project/controllers/employeeController.js
================================================
const express = require('express');
var router = express.Router();
const mongoose = require('mongoose');
const Employee = mongoose.model('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);
});
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);
}
});
}
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);
}
});
}
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;
}
}
}
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); }
});
});
module.exports = router;
================================================
FILE: project/models/db.js
================================================
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) }
});
require('./employee.model');
================================================
FILE: project/models/employee.model.js
================================================
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
}
});
// 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.');
mongoose.model('Employee', employeeSchema);
================================================
FILE: project/package.json
================================================
{
"name": "project",
"version": "1.0.0",
"description": "",
"main": "server.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "",
"license": "ISC",
"dependencies": {
"body-parser": "^1.18.3",
"express": "^4.16.4",
"express-handlebars": "^3.0.0",
"mongoose": "^5.3.4"
}
}
================================================
FILE: project/server.js
================================================
require('./models/db');
const express = require('express');
const path = require('path');
const exphbs = require('express-handlebars');
const bodyparser = require('body-parser');
const employeeController = require('./controllers/employeeController');
var app = express();
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.listen(3000, () => {
console.log('Express server started at port : 3000');
});
app.use('/employee', employeeController);
================================================
FILE: project/views/employee/addOrEdit.hbs
================================================
| Full Name | Mobile | City | ||
|---|---|---|---|---|
| {{this.fullName}} | {{this.email}} | {{this.mobile}} | {{this.city}} |