在Node.js中操作Mongodb

3.0文档:http://mongodb.github.io/node-mongodb-native/3.0/

1.引入依赖包:

npm install mongodb --save-dev

2.建立一个简单的服务,引入mongodb:
var express = require('express');

var app = express();

var MongoClient = require('mongodb').MongoClient;

var dbURL = 'mongodb://localhost:27017';

app.listen(process.env.POST || 8080);
3.写个路由
app.get('/insert',function(req, res) {
    MongoClient.connect(dbURL,function(err, db) {

        assert.equal(err,null);
        const person = db.db('person');
        const student = person.collection('student');

        student.insertOne({

            "name": "insert in nodejs"

        },function(error, result) {
            var re = JSON.parse(result);
            if (re.n === 1) {
                res.send("插入成功。");
            } else {
                res.send("插入失败,error:" + error);
            }
            res.end();
            db.close();
        })
    })
})

(1)连上数据库:connect(dbURL,callback)
(2)获取到要操作的数据库,然后获取要操作的表:

const person = db.db('person');
const student = person.collection('student');

旧版本的写法是直接获取person数据库,回调函数中的db为返回的person数据库:

var dbURL = 'mongodb://localhost:27017/person';
var student = db.collection('student');

这样写在新版中会报错: db.collection() is not a function.大概是废除了。

在浏览器中访问,然后用命令查看一下是否插入成功:

image.png
image.png
// 查
app.get('/query',function(req, res) {
    MongoClient.connect(dbURL,function(err, db) {
        assert.equal(err,null);
        
        const person = db.db('person');
        const student = person.collection('student');

        student.find({}).toArray(function(error, docs) {
            res.send(docs);         
            res.end();
            db.close();
        })
    })
})
// 改
app.get('/update',function(req, res) {
    MongoClient.connect(dbURL,function(err, db) {

        assert.equal(err,null);

        const person = db.db('person');
        const student = person.collection('student');

        student.updateOne({

            "name": "insert in nodejs test03"

        }, { $set: { "name" : "test" } }, function(error, result) {
            var re = JSON.parse(result);
            if (re.n === 1) {
                res.send("修改成功。");
            } else {
                res.send("修改失败,error:" + error);
            }
            res.end();
            db.close();
        })
    })
})
// 删
app.get('/delete',function(req, res) {

    var query = url.parse(req.url,true).query;
    var name = query.name;

    MongoClient.connect(dbURL,function(err, db) {

        assert.equal(err,null);

        const person = db.db('person');
        const student = person.collection('student');  

        student.deleteOne({ "name": name }, function(error, result) {
            var re = JSON.parse(result);
            if (re.n === 1) {
                res.send("删除成功。");
            } else {
                res.send("删除失败,error:" + error);
            }
            res.end();
            db.close();
        })
    })
})
4.封装一下:

/modules/db.js

var MongoClient = require('mongodb').MongoClient;
var dbUrl ='mongodb://localhost:27017';


function connectDb(callback) {
    MongoClient.connect(dbUrl,function(err,db){
        if(err) {
            console.log('数据库连接失败');
            return;
        }
        callback(db);
        db.close();
    })
}

exports.findOne = function(dbname,collectionname,json,callback){

    connectDb(function(db) {
        const DB = db.db(dbname);
        const collection = DB.collection(collectionname);
        var result = collection.findOne(json,null,callback);
    });
}

exports.find = function(dbname,collectionname,json,callback) {
    connectDb(function(db) {
        const DB = db.db(dbname);
        const collection = DB.collection(collectionname);
        var result = collection.find(json).toArray(callback);
    });
}

exports.insertOne = function(dbname,collectionname,json,callback){
    connectDb(function(db) {
        const DB = db.db(dbname);
        const collection = DB.collection(collectionname);
        collection.insertOne(json,callback)
    })

}

然后在server.js中导入:

var DB = require('./modules/db.js');

使用:

app.post('/submit',function(req,res) {
    var username = req.body.username;
    var password = md5(req.body.password); 
        
    DB.findOne('person','userinfo',{"username":username, "password":password}, function(error, docs) {
        if(docs === null) {
            res.send("<script>alert('登录失败');location.href='/login'</script>");
        } else {
            req.session.userinfo = docs;
            res.redirect('/product');  /*登录成功跳转到商品列表*/
        }
    });
})
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,847评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,208评论 1 292
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,587评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,942评论 0 205
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,332评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,587评论 1 218
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,853评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,568评论 0 198
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,273评论 1 242
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,542评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,033评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,373评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,031评论 3 236
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,073评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,830评论 0 195
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,628评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,537评论 2 269

推荐阅读更多精彩内容