node.js 学习笔记 07

数据库的学习

  • 数据库
    是用来存储数据的东西
  • 结构数据库(SQL)
    老式的数据库
  • 数据库
  • 字段
    一个数据库中可以又多张表,一张表中可以又多个字段
  • 数据处理不够灵活,但是安全性较高
  • 非结构数据库(NoSQL)
  • 数据库
  • 集合
  • 文档
    数据处理灵活,但是安全性低

mongoDB 的使用

  • 第一个要设置对应的路径,用来放置对应的数据库的配置文件以及对应的一些数据库文件
  • 然后相当于打开数据库,通过 mongoD --dbpath C:\mongo 路径名称来打开数据库
  • 注意:数据库打开不能关闭,就是不能把对应的命令行终端关闭
  • 需要再创建一个新的命令行终端
  • 使用 mongo 命令设置环境
  • 可以通过 show dbs 查看数据库
  • 可以通过 use来创建数据库,也可以通过这个命令来使用数据库
  • 如果没有这个数据库, use就表示创建数据库,如果要是有,就表示使用这个数据库
  • 然后我们需要设置数据,注意我们操控的是数据库中的集合,就是操控集合
  • 通过对应的命令来操控集合
  • 我们通过命令行操控集合的时候,如果没有对应的集合,系统会自动创建该集合
  • mangoDB 安装之后是局部的,需要操作环境变量将其提升至全局

数据库的使用

var express = require('express');
var MongoClient = require('mongo').MongoClient;
//当接受到请求后,就去链接数据库
var app = express();
app.get('/',function(req,res){
    //连接数据库
    //第一个参数表示数据库的地址
    var dataBaseUrl = "mongodb://localhost:27017/test1"
    //连接数据库是一个异步操作
    //凡事异步操作都需要回调
    MongoClient.connect(dataBaseUrl,function(err,db){
        //err 表示错误,就是表示如果有错,那么表示对应的数据库没有链接成功
        //db 可以用来操控数据库中的集合,进行增删改查
        if(err){
            console.log('数据库连接失败');
            return;
        };
        //连接成功后,我们就可以往数据库的集合中添加文档数据
        //如果集合也不存在,系统会自动创建 
        //如果没有集合,后台系统会自动创建集合
        //插入数据的时候,也是异步的,所以也需要回调
        db.collection('teacher').insertOne({'name':'xiaoming','age':18},function(err.result){
            if(err){
                console.log('插入数据失败');
                return;
            };
            res.send(result);
            //数据库在使用完毕后要手动关闭
            db.close();
        })
    })
})
app.listen(3000);
var expres = require('express');
var ejs = require('ejs');
var MongoClient = require('mongodb').MongoClient;
var app = expres();
//设置渲染模板
app.set('view engine','ejs');
/*当接受到请求后,获取数据后,然后渲染界面*/

//设置连接数据库的地址
var dataBaseUrl = 'mongodb://localhost:27017/test1';
app.get('/',function (req,res) {

    MongoClient.connect(dataBaseUrl,function (err,db) {
        if (err) {
            console.log('连接数据库失败');
            return;

        }

        //获取数据库中的内容然后,给使用ejs给对应的界面设置
        //拿出的数据是一个游标,我们可以通过each方法来遍历游标
        //不可以理解成集合
        var cursor = db.collection('teacher').find();

        //设置一个数组用来记录每一条dom
        var resut = [];
        //遍历游标


        cursor.each(function (i,dom) {

            //dom表示每一条记录
            //所以只要这个记录不是空,我们就记录这个文档(每一条数据json)
            if(dom !=null){
                //添加
                resut.push(dom);
            }else{
                //表示遍历完成
                // 渲染界面
                res.render('index',{
                    result:resut
                });
                //关闭数据库
                db.close();
            }
        })
    })
});

//设置添加的路由
app.get('/add',function (req,res) {
    //渲染界面
    res.render('add');    
});
//设置提交路由
app.get('/submitData',function (req,res) {
    
    //插入数据
    //获取提交的参数
    var name = req.query.name;
    var age = req.query.age;

    //连接数据库
    MongoClient.connect(dataBaseUrl,function (err,db) {
        //错误处理
        if(err){
            console.log('数据库连接失败');
            return;
        }
        //插入数据       db.collection('teacher').insertOne({'name':name,'age':age},function (err,result) {

            if(err){
                console.log('插入失败');
            }
            res.send('插入数据成功');
            db.close();
        })
    })
})
app.listen(3000);

封装增删改查功能


/*我就把和数据库相关的操控数据的操作都放在这个js文件中
* \以后想要使用数据库操控数据,我们只需要把这个文件到人,然后始用对应的方法就可以
* 实现增加,修改,删除,查找
* */
//因为增加删除修改以及查找都需要连接数据库,所以为了方便,我们最好把连接数据库的代码封装成一个函数
//1.封装一个连接数据库的函数
var MongoClient = require('mongodb').MongoClient;

function _conmect(callBack) {
    
    //1.获取连接的数据库,当连接数据库的时候,如果没有对应的数据库,系统会自动创建
    
    var url = 'mongodb://localhost:27017/test1';
    //2.连接
    MongoClient.connect(url,function (err,db) {
        //当连接完成数据库后,我们需要做对应的数据库的增加删除修改以及查询操作
        //需要涌到db,我们需要把对应的这些操作放在函数中,所以在对应的函数中我们需要使用db
        //需要把db传递给别的函数,可以使用回调
        
        callBack(err,db);        
    })
    
};
//2.实现插入功能
//这里需要三个参数
//第一个:表示插入的集合
//第二个表示插入的数据,就是一个json
//第三个表示,插入的返回的结果,返回的结果一把使用回调

exports.inserOne = function (collectionName,json,callBack) {
    //调用方法连接数据库,然后做对应的操作
    _conmect(function (err,db) {
        db.collection(collectionName).insertOne(json,function (err, result) {
            callBack(err,result);
            db.close();            
        })        
    })    
};
///3.实现查询
//第一个参数表示集合的名称
//第二个表示查询的条件
//第三个表示回调
exports.find = function (collectionName,json,callBack) {
    _conmect(function (err,db) {
        var result = [];
        //
        var cursor = db.collection(collectionName).find(json);
        //遍历游标
        cursor.each(function (err,dom) {
            
            //如果dom不为空就添加,如果为空返回对应的结果,关闭数据库
            if(dom != null){
                result.push(dom);
            }else{
                //把数据传递出去
                callBack(err,result);
                
                db.close();                
            }            
        })        
    })    
};
//4.删除
exports.removeMany = function (collectionName,json,callBack) {
    
    _conmect(function (err,db) {
        
        //删除数据
        db.collection(collectionName).removeMany(json,function (err,result) {
            
            callBack(err,result);
            db.close();           
        })        
    })    
};
//5.修改,修改必须首先根据第一个json找到对应的数据,然后根据第二个json来去顶改成的数据
//所以需要四个参数,定义json表示要查找的数据,第二个表示修改成为的数据
exports.updateMany = function (collectionName,json1,json2,callBack) {
    _conmect(function (err,db) {
       db.collection(collectionName).updateMany(json1,json2,function (err,result) {
            callBack(err,result);
            db.close();            
        })        
    })    
}
/**
 * Created by Administrator on 2017/6/20.
 */

var express = require('express');
var db = require('./models/db.js');

var app = express();
//设置增加 ,删除,修改和查找的路由
app.get('/insert',function (req,res) {
    //调用数据库的方法
    db.inserOne('teacher',{'name':'addData','age':20},function (err,result) {
        if(err){
            console.log('插入数据失败');
            return;
        }
        res.send(result);
    })
});
//处理查找的路由
app.get('/search',function (req,res) {
    
    //使用对应的方法来查找对应的数据
    db.find('teacher',{},function (err,result) {
        if(err){
            console.log(err);
            return;
        }
        console.log(result);
        res.send('查找成功');        
    })  
});
//处理删除的路由
app.get('/delete',function (req,res) {
    db.removeMany('teacher',{'name':'xiaoming'},function (err,result) {
        if(err){
            console.log(err);
            return;
        }
        // res.write(result);        
        res.send('删除成功');
   
    })   
})
app.listen(3000);
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,716评论 4 364
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,558评论 1 294
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 109,431评论 0 244
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,127评论 0 209
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,511评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,692评论 1 222
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,915评论 2 313
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,664评论 0 202
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,412评论 1 246
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,616评论 2 245
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,105评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,424评论 2 254
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,098评论 3 238
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,096评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,869评论 0 197
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,748评论 2 276
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,641评论 2 271

推荐阅读更多精彩内容