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 Video Tutorial for Node.js-Expess-MongoDB-CRUD | :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 ================================================

{{viewTitle}}

{{employee.fullNameError}}
{{employee.emailError}}
View All
================================================ FILE: project/views/employee/list.hbs ================================================

Create New Employee List

{{#each list}} {{/each}}
Full Name Email Mobile City
{{this.fullName}} {{this.email}} {{this.mobile}} {{this.city}}
================================================ FILE: project/views/layouts/mainLayout.hbs ================================================ Node.js express mongDB CRUD
{{{body}}}