Vijay Singh
Vijay Singh

Reputation: 277

Mongodb not working with Nodejs

I'm trying to print name and job of people after taking input from via a html form on the browser. The program also allows deletion and update of record through simple links on the same page. The program is, however, not working.

I even tried creating a "newapp" database (created in the server file) and filled it with some dummy values, the program still wont work!

Following is my node.js file

var express= require("express"),
http= require("http"),
bodyparser= require('body-parser'),
mongo= require("mongodb");

var app= express(),
db= new mongo.Db("newapp", 
                    new mongo.Server("localhost", 27017), 
                    {safe:true}, {auto_reconnect: true}),
people= db.collection("people");

app.use(bodyparser.urlencoded({extended: true}));

app.get("/", function(req, res){
    people.find().toArray(function(err, docs){
            if(err) 
                throw err;
            res.render("index.jade", {people: docs});   
    });
});

app.post("/", function(req, res){
    people.insert({name: req.body.name, job: req.body.job}, 
            function(err, doc){
                    if(err)
                        throw err;
                    res.redirect("/");
            });
});

app.listen(3000);

My index.jade file is:

form(method="POST")
    p Name:
        input(type="text", name="name")

    p Job:  
        input(type="text", name="job")

    p: button Add

if(typeof(people)!=="undefined")
    ul
            each person in people
                    li
                        h2= person.name+ " ("+ person.job+ ")"
                        p
                            a(href="/update/#{person._id}") Update
                            a(href="/delete/#{person._id}") Delete

else
    p No People

Any help is much appreciated. Thanks a lot!

Upvotes: 0

Views: 2171

Answers (2)

Vijay Singh
Vijay Singh

Reputation: 277

The error was that I had not done db.open(...) anywhere in the program

Correct working code is:

var express= require("express"),
http= require("http"),
bodyparser= require("body-parser"),
mongo= require("mongodb");

var app= express(), 
db= new mongo.Db("newapp", new mongo.Server("localhost", "27017"), 
                             {safe:true}, {auto_reconnect: true});

app.use(bodyparser.urlencoded({extended: true}));

db.open(function(err, db){
    if(err)
        console.log(err);

    people= db.collection("people");

    app.get("/", function(req, res){
        var cursor= people.find();
        cursor.toArray(function(err, docs){
            if(err) 
                throw err;
            res.render("index.jade", {people: docs});   
        });
    });

    app.post("/", function(req, res){
        people.insert({name: req.body.name, job: req.body.job}, 
            function(err, doc){
                    if(err)
                        throw err;
                    res.redirect("/");
            });
    });

    app.get("/update/:id", function(req, res){
        people.findOne({_id: new mongo.ObjectID(req.params.id)}, 
            function(err, doc){
                    if(err) 
                        throw err;
                    res.render("update.jade", {person: doc});
            });
    });

    app.post("/update/:id", function(req, res){
        people.update({_id: new mongo.ObjectID(req.params.id)},{
                    name: req.body.name,
                    job: req.body.job
            }, function(err, item){
                    if(err)
                        throw err;
                    res.redirect("/");
            });
    });

    app.get("/delete/:id", function(req, res){
        people.remove({_id: new mongo.ObjectID(req.params.id)},
            function(err){
            if(err)
                throw err;
            res.redirect("/");
            });
    });
});

app.listen(3000, function(){
    console.log("Now Listening on port: 3000");
});

The index.jade (in views folder) is:

form(method="POST")
    p Name:
        input(type="text", name="name")

    p Job:  
        input(type="text", name="job")

    p: button Add

if(people!==NULL)
    ul
        each person in people
                li
                    h2= person.name+ " ("+ person.job+ ")"
                    p
                        a(href="/update/#{person._id}") Update&nbsp
                        a(href="/delete/#{person._id}") Delete

else
    p No People

The update.js (in views folder) is:

form(method="POST")
    p Name:
            input(type="text", name="name", value="#{person.name}")

    p Job:  
            input(type="text", name="job", value="#{person.job}")

    p: button Update

Upvotes: 1

Ravindra Galav
Ravindra Galav

Reputation: 2900

please check this hope this will work..

 var express= require("express"),
    http= require("http"),
    bodyparser= require('body-parser'),
 var MongoClient = require('mongodb').MongoClient;
var connect = require('connect'),
    var app= express(),
   MongoClient.connect("mongodb://localhost:27017/newapp", function(err, db) {
  if(err) { return console.dir(err); }

              var people = db.collection('people');
    app.use(bodyparser.urlencoded({extended: true}));

    app.get("/", function(req, res){
        people.find().toArray(function(err, docs){
                if(err) 
                    throw err;
                res.render("index.jade", {people: docs});   
        });
    });

    app.post("/", function(req, res){
        people.insert({name: req.body.name, job: req.body.job}, 
                function(err, doc){
                        if(err)
                            throw err;
                        res.redirect("/");
                });
    });
  });  
    app.listen(3000);

Upvotes: 0

Related Questions