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

成都苏天天      2022-02-11     297

关键词:

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

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

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

 

node.js操作mangodb


 

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

使用

npm install mongodb@2.2.33

,将mongodb控制模块安装到本地 (由于后来的mongodb版本操作方法有改变,这里使用 @2.2.33来安装这个版本,下图是后来换的,所以和前面命令行的截图风格不同

 

 

在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();
  });

};

 

 使用这个封装

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

 

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

 

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

 

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

第六章建议学习时间4小时 课程共10章学习方式:详细阅读,并手动实现相关代码学习目标:此教程将教会大家安装Node、搭建服务器、express、mysql、mongodb、编写后台业务逻辑、编写接口,最后完成一个完整的项目后台,预计... 查看详情

node.js零基础详细教程:express路由

 第五章建议学习时间4小时 课程共10章学习方式:详细阅读,并手动实现相关代码学习目标:此教程将教会大家安装Node、搭建服务器、express、mysql、mongodb、编写后台业务逻辑、编写接口,最后完成一个完整的项目后台,... 查看详情

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

第一章建议学习时间2小时 课程共10章学习方式:详细阅读,并手动实现相关代码学习目标:此教程将教会大家安装Node、搭建服务器、express、mysql、mongodb、编写后台业务逻辑、编写接口,最后完成一个完整的项目后台,预计... 查看详情

安装使用mongoose配合node.js操作mongodb的基础教程转载

...篇文章主要介绍了安装使用Mongoose来让Node.js操作MongoDB的基础教程,前端js+后端node+js操作MongoDB正是所谓最流行的一种JavaScript全栈开发方案,需要的朋友可以参考下安装mongoose使用express准备一个TestMongoDB项目,命令序列如下:expressTes... 查看详情

node.js教程基础:第一个node.js程序(代码片段)

第一个Node.js程序可以是基于控制台console和基于Web的node.js应用程序。基于console的node.js例子文件:console_example1.js1console.log(‘HelloWorld);打开Node.js命令提示符并运行以下代码:>nodeconsole_example1.js>HelloWorld在这里,console.log()函数... 查看详情

node.js学习如何提高自己?我想自学

...先,必须了解nodejs的相关知识的综述,这是第一步,也是基础。然后开始有计划的去学习教程,教程作为基础的书籍,必须每天有计划的去进行相关的学习。该掌握nodejs的基础知识必须掌握。在学习教材的时候,可以借助相关的... 查看详情

js逆向之node.js环境配置详细教程(代码片段)

目录一、安装1.1下载安装包1.2安装(一路Next就好了,傻瓜式安装)1.3配置npm在安装全局模块时的路径和缓存cache的路径1.4测试二、Pycharm调用NodeJS运行js代码的环境配置一、安装1.1下载安装包下载链接:https://nodejs.org/en/,... 查看详情

node.js基础知识

 ##什么是Node.js?1.Node.js是一门后端语言2.基于Chromev8引擎的js运行环境除此之外:还有其他的引擎:单片机、actionscript3.Node.js有两大特征1.事件驱动1.事件的定义(发布)2.事件的触发(订阅)2.非阻塞式I/O模型1.非阻塞:执行一... 查看详情

node.js基础(代码片段)

什么是Node.js?Node.js是一门后端语言基于Chromev8引擎的js运行环境除此之外:还有其他的引擎:单片机、actionscriptNode.js有两大特征事件驱动事件的定义(发布)事件的触发(订阅)非阻塞式I/O模型非阻塞:执行一个任务时,不需要... 查看详情

《饿了么大前端node.js进阶教程》—javascript基础问题—引用传递

《饿了么大前端Node.js进阶教程》地址:https://github.com/ElemeFE/node-interview1.如何编写一个json对象的拷贝函数functionclone(obj){  varresult;  if(Array.isArray(obj)){    result=[];    obj.forEach((item)=>{      result.push(cl 查看详情

《饿了么大前端node.js进阶教程》—javascript基础问题—类型判断

lodash的类型判断源码《饿了么大前端Node.js进阶教程》地址:https://github.com/ElemeFE/node-interview lodash介绍:lodash是目前很流行的JS工具库,它封装了许多JS常用到的工具方法,在阅读源码时,你会发现代码冗长;官网说这是性能... 查看详情

《饿了么大前端node.js进阶教程》—javascript基础问题—作用域

《饿了么大前端Node.js进阶教程》地址:https://github.com/ElemeFE/node-interview作用域从某种意义上来说是个难点,它需要你真真正正的了解JS的分词、词法分析,语法分析,代码生成,LHS查询,RHS查询等深层的东西。如果不知道可以读... 查看详情

node.js使用教程-3.gulp-file-include详细教程(代码片段)

前言gulp-file-include是gulp插件,它提供了一个include方法让我们可以像后端模板那样把公共部分的页面导入进来,实现html复用。环境准备gulp-file-include是gulp的插件,所以需要先安装gulpnpminstall-ggulpnpminstallgulp--save-devnpminstallgulp-... 查看详情

node.js概述

JavaScript标准参考教程(alpha)草稿二:Node.jsNode.js概述GitHub TOP Node.js概述来自《JavaScript标准参考教程(alpha)》,by阮一峰目录简介安装与更新版本管理工具nvm基本用法REPL环境异步操作全局对象和全局变量模块化结构概述... 查看详情

如何发布一个自定义node.js模块到npm(详细步骤)

...先假定各位已经在window全局安装了Node.js,下面开始进行详细步骤介绍:本文本着,以极少的文字说明以及极少的代码书写为原则来给大家演示!文章中上传的模块不具备任何意义!一、封装node.js模块时的必须项1.创建package.json... 查看详情

node.js文件系统操作(代码片段)

文章目录文件系统基础fs模块同步、异步文件操作文件路径文件模式文件与目录基本操作文件基本操作目录的基本操作文件系统高级操作流接口文件遍历和监视文件遍历文件监视JSON格式文件操作文件系统基础fs模块fs模块提供一... 查看详情

node.js基础(代码片段)

node.js初学1.node.js简介2.node.js搭建服务器3.fs模块的简单使用4.路由的简单设计Content-Type:5.模块HTML的多文件引用node.js的多文件引用exports命令exports的命名空间module.exports文件夹的使用node_modules文件夹6.npm的基本使用npm的身份证和依赖... 查看详情

10+最佳的node.js教程和实例

...Node.js的学习资料及指南,那么请继续(阅读),我们的教程将会覆盖即时聊天应用、API服务编写、投票问卷应用、人物投票APP、社交授权、Node.jsonRaspberryPi等等。以下是Node.js入门的简单介绍,如果你对Node.js略有了解可以直接跳... 查看详情