node.js零基础详细教程:node.js操作mongodb,及操作方法的封装
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了node.js零基础详细教程:node.js操作mongodb,及操作方法的封装相关的知识,希望对你有一定的参考价值。
学习方式:详细阅读,并手动实现相关代码
学习目标:此教程将教会大家 安装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.11var 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(); }); }//deletevar 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(); }); };//findvar 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); }); });//updatevar 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(); }); };
使用这个封装
具体的封装的使用方法,我们将在下一节课项目中去介绍
今天就讲到这里,明天我们讲解:项目的创建,后台数据请求接口的编写
以上是关于node.js零基础详细教程:node.js操作mongodb,及操作方法的封装的主要内容,如果未能解决你的问题,请参考以下文章
node.js零基础详细教程:node.js操作mongodb,及操作方法的封装