In this video I show the easiest way to connect NodeJS to a MongoDB database. Installation and solving common errors is covered. We’ll create a database and then query and update it using NodeJS. We’ll review how to template pages with Jade. We review how to set up a NodeJS tutorial. Also because of requests, I will show myself writing all of the code.
I have other tutorials on the following topics if you want to learn more about : NodeJS, MongoDB, or Jade. All of the code follows the video below.
If you like videos like this, it would help me greatly if you’d support me on Patreon.
After making just $3.49 off of my last 8 videos I decided if I want to keep making educational videos I’ll have to look for an income source. $1 is greatly appreciated! If you can’t afford it though that is perfectly ok because I’m very happy that my videos are helping over 30 million people each month.
[googleplusone]
Code From the Video
package.json
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
{ "name": "sampsite", "version": "0.0.0", "private": true, "scripts": { "start": "node ./bin/www" }, "dependencies": { "body-parser": "~1.13.2", "cookie-parser": "~1.3.5", "debug": "~2.2.0", "express": "~4.13.1", "jade": "~1.11.0", "kerberos": "~0.0.17", "mongodb": "~2.0.33", "morgan": "~1.6.1", "serve-favicon": "~2.3.0" } } |
app.js
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 |
// Imports all the modules needed var express = require('express'); var path = require('path'); var favicon = require('serve-favicon'); var logger = require('morgan'); var cookieParser = require('cookie-parser'); var bodyParser = require('body-parser'); // Used to connect to the MongoDB database var mongo = require('mongodb') var routes = require('./routes/index'); var users = require('./routes/users'); var app = express(); // Define the directory with the views and to use Jade app.set('views', path.join(__dirname, 'views')); app.set('view engine', 'jade'); // uncomment after placing your favicon in /public //app.use(favicon(path.join(__dirname, 'public', 'favicon.ico'))); app.use(logger('dev')); app.use(bodyParser.json()); app.use(bodyParser.urlencoded({ extended: false })); app.use(cookieParser()); app.use(express.static(path.join(__dirname, 'public'))); // Define what route files to use being routes/index.js for / // routes/users.js for /users // The route files then render the page app.use('/', routes); app.use('/users', users); // catch 404 and forward to error handler app.use(function(req, res, next) { var err = new Error('Not Found'); err.status = 404; next(err); }); // error handlers // development error handler // will print stacktrace if (app.get('env') === 'development') { app.use(function(err, req, res, next) { res.status(err.status || 500); res.render('error', { message: err.message, error: err }); }); } // production error handler // no stacktraces leaked to user app.use(function(err, req, res, next) { res.status(err.status || 500); res.render('error', { message: err.message, error: {} }); }); module.exports = app; |
index.js
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 |
var express = require('express'); var router = express.Router(); var mongodb = require('mongodb'); /* GET home page. */ // Defines the root route. router.get receives a path and a function // The req object represents the HTTP request and contains // the query string, parameters, body, header // The res object is the response Express sends when it receives // a request // render says to use the views/index.jade file for the layout // and to set the value for title to 'Express' router.get('/', function(req, res, next) { res.render('index', { title: 'Express' }); }); router.get('/thelist', function(req, res){ // Get a Mongo client to work with the Mongo server var MongoClient = mongodb.MongoClient; // Define where the MongoDB server is var url = 'mongodb://localhost:27017/sampsite'; // Connect to the server MongoClient.connect(url, function (err, db) { if (err) { console.log('Unable to connect to the Server', err); } else { // We are connected console.log('Connection established to', url); // Get the documents collection var collection = db.collection('students'); // Find all students collection.find({}).toArray(function (err, result) { if (err) { res.send(err); } else if (result.length) { res.render('studentlist',{ // Pass the returned database documents to Jade "studentlist" : result }); } else { res.send('No documents found'); } //Close connection db.close(); }); } }); }); // Route to the page we can add students from using newstudent.jade router.get('/newstudent', function(req, res){ res.render('newstudent', {title: 'Add Student' }); }); router.post('/addstudent', function(req, res){ // Get a Mongo client to work with the Mongo server var MongoClient = mongodb.MongoClient; // Define where the MongoDB server is var url = 'mongodb://localhost:27017/sampsite'; // Connect to the server MongoClient.connect(url, function(err, db){ if (err) { console.log('Unable to connect to the Server:', err); } else { console.log('Connected to Server'); // Get the documents collection var collection = db.collection('students'); // Get the student data passed from the form var student1 = {student: req.body.student, street: req.body.street, city: req.body.city, state: req.body.state, sex: req.body.sex, gpa: req.body.gpa}; // Insert the student data into the database collection.insert([student1], function (err, result){ if (err) { console.log(err); } else { // Redirect to the updated student list res.redirect("thelist"); } // Close the database db.close(); }); } }); }); module.exports = router; |
newstudent.jade
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
extends layout block content h3= title form#form_add_student(name="addstudent", method="post", action="/addstudent") span Name span input#input_name(type="text", placeholder="student", name="student") br br span Street span input#input_street(type="text", placeholder="street", name="street") br br span City span input#input_city(type="text", placeholder="city", name="city") br br span State span input#input_state(type="text", placeholder="state", name="state") br br span Sex span input#input_sex(type="text", placeholder="sex", name="sex") br br span GPA span input#input_gpa(type="text", placeholder="gpa", name="gpa") br br button#submit_student(type="submit") submit |
studentlist.jade
1 2 3 4 5 6 7 8 9 |
extends layout block content h3. Students ul each student, i in studentlist li#student_list_item a(href='#') #{student.student} lives at #{student.street} #{student.city}, #{student.state} |
Leave a Reply