node.js零基础详细教程(7):node.js操作mongodb,及操作方法的封装

第七章 建议学习时间4小时  课程共10章

学习方式:详细阅读,并手动实现相关代码

学习目标:此教程将教会大家 安装Node、搭建服务器、express、mysql、mongodb、编写后台业务逻辑、编写接口,最后完成一个完整的项目后台,预计共10天课程。

node.js操作mangodb



创建一个用于放置今天文件的文件夹,npm init初始化一下,并创建demo1.js用于写node代码

使用 npm install mongodb,将mongodb控制模块安装到本地

在demo1.js中写入下面操作代码

 1 var mongo = require("mongodb"); //引入mongodb模块
 2 var assert = require("assert"); //引入断言模块
 3
 4 var MongoClient = mongo.MongoClient;  //开启服务
 5
 6 var Urls = "mongodb://localhost:27017/demo2";  //url储存  放在连接池中。
 7
 8 MongoClient.connect(Urls,function(err,db){  //获取连接
 9     assert.equal(null,err);  //使用断言模块代替以前的 if判断
10
11
12     //插入数据
13     db.collection("t1").insert({"name":"xiaoming"},function(err,result){ //连接到数据库上面,并使用参数传入集合
14         assert.equal(null,err);
15         console.log(result);
16         db.close();
17     });
18
19
20 });

代码解释:

1行2行引入了需要的两个模块,4行开启服务器,

6行是url的地址,一般默认安装的时候地址和端口是 “mongodb://localhost:27017”,后面的demo2是我的mongodb的数据库的名字(你替换成你自己创建的数据库即可)

8行是根据上面声明的url去和数据库建立连接,connect方法有两个参数,1、连接的数据库地址,2、回调函数,回调函数两个参数表示发送错误,以及正确的情况下返回数据库的链接,我们就可以在此链接上进行操作了。

注意:这里的链接是初学者常报错的地方,如果报错,去确认地址和数据库名字是否填错,确保自己的数据库中有对应的库名字。

重点讲解下 13行,这里是node插入数据库的操作, db.collection("t1")表示获取需要操作的表,  insert是插入方法,方法接收两个参数,1、插入的内容,2、回调函数,回调函数两个参数表示发送错误,以及正确的情况下返回的结果。

15行打印出错结果,16行关闭和数据库的链接(如果一直连着,浏览器会崩溃)

执行demo1.js。成功即可得到下图结果   (  划线处的 n表示成功了1条 )

查询数据库,可以看到新添加的数据

查找:  find方法,传入查找筛选的json(如果不传,就查询全部),后面的toArray是将数据作处理之后变成我们可以识别的数组格式

后面的操作,除了中部的数据操作部分代码不同,其余代码都是相同的。

 1 var mongo = require("mongodb"); //引入mongodb模块
 2 var assert = require("assert"); //引入断言模块
 3
 4 var MongoClient = mongo.MongoClient;  //开启服务
 5
 6 var Urls = "mongodb://localhost:27017/demo2";  //url储存  放在连接池中。
 7
 8 MongoClient.connect(Urls,function(err,db){  //获取连接
 9     assert.equal(null,err);  //使用断言模块代替以前的 if判断
10
11
12     //查找数据
13     db.collection("t1").find({"name":"xiaoming"}).toArray(function(err,result){
14         assert.equal(null,err);
15         console.log(result);
16         db.close();
17     })
18
19
20 });

运行,成功查找到上一步插入的数据

删除    使用 deleteOne删除一条数据,两个参数 1、删除的查找json 2、回调函数

 1 var mongo = require("mongodb"); //引入mongodb模块
 2 var assert = require("assert"); //引入断言模块
 3
 4 var MongoClient = mongo.MongoClient;  //开启服务
 5
 6 var Urls = "mongodb://localhost:27017/demo2";  //url储存  放在连接池中。
 7
 8 MongoClient.connect(Urls,function(err,db){  //获取连接
 9     assert.equal(null,err);  //使用断言模块代替以前的 if判断
10
11     //删除数据
12     db.collection("t1").deleteOne({"name":"xiaoming"},function(err,result){ //连接到数据库上面,并使用参数传入集合
13         assert.equal(null,err);
14         console.log(result);
15         db.close();
16     });
17
18 });

执行,成功的结果

查询数据库发现 xiaoming那条数据被删除了

修改: 使用 update方法,包括三个参数,1、查询条件,2、修改的字段以及修改器,3、回调函数

var mongo = require("mongodb"); //引入mongodb模块
var assert = require("assert"); //引入断言模块

var MongoClient = mongo.MongoClient;  //开启服务

var Urls = "mongodb://localhost:27017/demo2";  //url储存  放在连接池中。

MongoClient.connect(Urls,function(err,db){  //获取连接
    assert.equal(null,err);  //使用断言模块代替以前的 if判断

    //修改数据
    db.collection("t1").update({"name":"zhangsan1"},{$set:{"name":"xiaoming"}},function(err,result){ //连接到数据库上面,并使用参数传入集合
        assert.equal(null,err);
        console.log(result);
        db.close();
    });

});

运行成功的结果

查询数据库发现,原来的zhangsan1被修改成了xiaoming

到这里,就实现了通过nodejs增删改查mongodb数据库

封装增删改查的代码



创建一个封装js的文件  dbhandler.js  ,将下列代码复制进去(封装的代码文字解说太困难,这里就不解释了,只给大家介绍如何使用,以后可能会出视频教程,到时候再详细解释这个封装)

--   注:第6行的url后面的数据库 替换成自己要操作的数据库,其他都不用变

var mongo=require("mongodb");//@2.2.11
var MongoClient = mongo.MongoClient;
var assert = require(‘assert‘);
var host="localhost";
var port="27017";
var Urls = ‘mongodb://localhost:27017/demo2‘;

//add一条数据
var add = function(db,collections,selector,fn){
  var collection = db.collection(collections);
  collection.insertMany([selector],function(err,result){
    assert.equal(err,null);
    fn(result);
    db.close();
  });
}
//delete
var deletes = function(db,collections,selector,fn){
  var collection = db.collection(collections);
  collection.deleteOne(selector,function(err,result){
    try{assert.equal(err,null)}catch(e){
      console.log(e);
    }
    fn(result);
    db.close();
  });

};
//find
var find = function(db,collections,selector,fn){
  var collection = db.collection(collections);

    collection.find(selector).toArray(function(err,docs){

      try{
        assert.equal(err,null);
      }catch(e){
        console.log(e);
        docs = [];
      }

      fn(docs);
      db.close();
    });

}
//(权限控制) -- 暂时没有用
MongoClient.connect(Urls, function(err, db) {
  find(db,"powers",null,function(d){
    console.log("123s");
    console.log(d.length);
  });
});

//update
var updates = function(db,collections,selector,fn){
  var collection = db.collection(collections);
  console.log(selector);
  collection.updateOne(selector[0],selector[1],function(err,result){
    assert.equal(err,null);
    assert.equal(1,result.result.n);
    fn(result);
    db.close();
  });

}

//方法都赋值到操作对象上,便于调用
var methodType = {
  login:find,
  show:find,
  add:add,
  getpower:find,
  update:updates,
  delete:deletes,
  updatepass:updates,
  adduser:add,
  usershow:find,
  getcategory:find,
  getcourse:find,
  find:find,
  state:find,
  top:find,
  AddDirectory:find,
  updateDirectory:updates,
  deleteDirectory:deletes,
  showlist:find,
  showdir:find
};
//主逻辑
module.exports = function(req,res,collections,selector,fn){
  MongoClient.connect(Urls, function(err, db) {
    assert.equal(null, err);
    console.log("Connected correctly to server");
    methodType[req.query.action](db,collections,selector,fn);
    db.close();
  });

};

使用这个封装

具体的封装的使用方法,我们将在下一节课项目中去介绍

今天就讲到这里,明天我们讲解:项目的创建,后台数据请求接口的编写

关注公众号,博客更新即可收到推送

时间: 2024-10-19 22:20:47

node.js零基础详细教程(7):node.js操作mongodb,及操作方法的封装的相关文章

node.js零基础详细教程(5):express 、 路由

第五章 建议学习时间4小时  课程共10章 学习方式:详细阅读,并手动实现相关代码 学习目标:此教程将教会大家 安装Node.搭建服务器.express.mysql.mongodb.编写后台业务逻辑.编写接口,最后完成一个完整的项目后台,预计共10天课程. express Express 是一个基于 Node.js 平台的极简.灵活的 web 应用开发框架,它提供一系列强大的特性,帮助你创建各种 Web 和移动设备应用. 其实可以简单的将express理解为node.js的一个类库:我们在使用j

node.js零基础详细教程(6):mongodb数据库操作

第六章 建议学习时间4小时  课程共10章 学习方式:详细阅读,并手动实现相关代码 学习目标:此教程将教会大家 安装Node.搭建服务器.express.mysql.mongodb.编写后台业务逻辑.编写接口,最后完成一个完整的项目后台,预计共10天课程. 数据库 数据库管理结构,一般分为两种:B/S架构   C/S架构. B/S架构:  Browser/Server,浏览器/服务器模式,即通过浏览器和服务器端的数据库进行交互 C/S架构:  Client/Server,客户端/服务器模式,即通

node.js零基础详细教程(4):node.js事件机制、node异步IO操作

第四章 建议学习时间3小时  课程共10章 学习方式:详细阅读,并手动实现相关代码 学习目标:此教程将教会大家 安装Node.搭建服务器.express.mysql.mongodb.编写后台业务逻辑.编写接口,最后完成一个完整的项目后台,预计共10天课程. node.js事件机制 node.js是单线程,但是通过事件和回调支持并发,可以实现非常高的性能. node.js所有的API都是通过异步调用.第一堂课的时候,我们写过一个同步和异步的示例(如下),当初说到:同步代码先执行完成,然后才执行异步

nodejs零基础详细教程1:安装+基础概念

第一章 建议学习时间2小时  课程共10章 学习方式:详细阅读,并手动实现相关代码 学习目标:此教程将教会大家 安装Node.搭建服务器.express.mysql.mongodb.编写后台业务逻辑.编写接口,最后完成一个完整的项目后台,预计共10天课程. 每日更新,建议跟学,按照本教程学习一定可以学好Nodejs,中途发现教程有误的地方,请及时留言反馈 node.js安装 通过官网下载 node.js 中文网下载地址 http://nodejs.cn/download/ windows系统我们

nodejs零基础详细教程2:模块化、fs文件操作模块、http创建服务模块

第二章  建议学习时间4小时  课程共10章 学习方式:详细阅读,并手动实现相关代码 学习目标:此教程将教会大家 安装Node.搭建服务器.express.mysql.mongodb.编写后台业务逻辑.编写接口,最后完成一个完整的项目后台,预计共10天课程. 模块儿化  为什么需要模块儿化? 我们以前的常规js代码中,我们为了重用一些js代码,是将js方法封装起来,放到js文件中,然后在HTML页面中引入js,就可以在页面中使用这些方法了. 当这种直接引入和调用的方式存在一些不友好的地方,比如,

photoshop零基础入门教程——办公资源网

Ps是经常用到的办公工具,各行各业都会接触,可是使用Ps时各种各样的麻烦事也是让人头疼得不行,下面为大家准备了ps零基础入门教程分享,快来看看~ 本教程由Photoshop研发人员徐言武老师亲身教授,每一个工具的使用,每一张图的编辑都一步一步慢慢讲解.课程从Photoshop CC的安装讲起,再到工具栏的功能介绍,和实际应用操作,可以说为每一位学员扫清了学习过程中能碰到的所有问题.总之,这是一套入门级课程,可以帮助你打下坚实的基础.课程优势:http://www.bangongziyuan.co

JS零基础一步一步做应用全记录

1.起因 作为几个外卖重度依赖癌晚期患者,呆宿舍的时候几个人一起叫外卖已经是常事.偶然看到隔壁宿舍在饿了么订餐的时候,看到在饿了么的首页上有一个谁去拿外卖的一个小游戏/工具,感觉这个小细节,饿了么把握的很好.但好像我们吃得多的是美团,回来之后,百度“谁去拿外卖网页版”,没有结果.想着反正这东西看上去不会太难,那就自己做一个吧.在学校各种事情没时间,放假回家后时间便相当充足.于是,作为一个HTML半入门+JS零基础的孩子,就这样开始了,现在是2015.2.10 10:17. 2.功能设计 对其要求

Linux零基础入学之1-3 RHEL7基本命令操作和启动级别设置

§Linux零基础入学之1-3 RHEL7基本命令操作和启动级别设置 [本节内容] *Linux终端介绍 *shell提示符 *Bash shell基本语法 *基本命令的使用:ls.pwd.cd *查看系统折BIOS设置 *Linux如何获得帮助 *Linux关机命令:shutdown.init 0等 *Linux 7个启动级别 *设置服务器在来电后自动开机 [Linux终端介绍] tty    控制台终端 pts    代表虚拟终端 tty1-tty6 > 刚进入的图形界面(桌面)为tty1

(转)Matlab 正则表达式零基础起步教程

摘        要:正则表达式是一个重要的编程概念.应用正则表达式可以实现很多强大的字符处理功能,有时也可以为常规方法解决起来比较复杂的问题另辟蹊径.本文试图通过比较详尽的示例为没有基础的读者介绍正则表达式的基本概念.用法及其在Matlab中的实现.文末附上几个应用表达式解决实际问题的实例,以利于读者在自己的实践中应用. 关  键  词:正则表达式    Matlab    regexp 1.  引言 正则表达式就是一个表达式(也是一串字符),它定义了某种字符串模式——利用正则表达式,可以 对