node插件MongoDB(五)—— 库mongoose 的模块化(五)

文章目录

  • 一、使用mongoose 模块化的原因
  • 二、准备工作
    • 2. 启动mongo.exe 和mongod.exe 两个程序连接数据库
  • 三、基本模块的拆分
    • 1、基本逻辑
    • 2、代码
    • 3、代码图示说明
  • 四、在index.js 中进一步的拆分
    • 1.拆分原因
    • 2.新建model文件夹存储文档的结构对象
    • 3.代码
    • 4.代码实际演示和注意点


一、使用mongoose 模块化的原因

原因:如你看完这个系列的文章,你发现会有很多重复的代码。(包括但不限于导入mongoose、设置strictQuery为true、连接mongodb服务等代码)
作用:对代码做一个拆分,将里面的内容进行复用。

二、准备工作

如下图所示:在你的项目中新建文件夹08模块化,在新建文件夹中创建db文件夹新建db.js存储相同逻辑的代码,使用index.js 用来引入db文件夹中的内容进行操作数据库的一些操作。
在这里插入图片描述

2. 启动mongo.exe 和mongod.exe 两个程序连接数据库

在这里插入图片描述

三、基本模块的拆分

1、基本逻辑

(1)在db文件夹中的db.js中写入重复代码
(2)在inedx.js 中写入连接成功要执行的成功方法函数
(3)验证:根据mongo.exe查看数据库的数据新增成功

2、代码

db.js


// 将相同操作的代码放到一个函数中,之后复用这个函数即可。
/*** * @param {*} success  执行成功的回调函数* @param {*} err  执行失败的回调函数*/
module.exports = function (success, err) {// 1:安装并导入mongooseconst  mongoose = require('mongoose')mongoose.set('strictQuery', true); // 解决终端警告的问题// 2: 连接 mongodb 服务// mongodb: 表示mongodb 服务,而不是http服务// 27017 表示端口号// test 表示数据库名mongoose.connect('mongodb://127.0.0.1:27017/test')// 3:设置回调// 3.1 设置连接成功的回调// 设置连接成功的回调: once 事件回调函数只执行一次mongoose.connection.once('open', () => {console.log('db.js中的连接成功');success();})// 3.2 设置连接错误的回调mongoose.connection.on('error', () => {console.log('连接错误');})// 3.3 设置连接关闭的回调mongoose.connection.on('close', () => {console.log('连接关闭');})
}

index.js

// 1:导入mongoose 
const mongoose = require('mongoose')
// 2:导入db文件
const db = require('./db/db')
// 3:调用函数(参数1为成功回调,参数2为失败回调)
db(() => {console.log('index.js中的连接成功');// 4:创建文档的结构对象// 设置集合中文档的属性以及属性值的类型let userSchema = new mongoose.Schema({name: String,age: Number,sex: String})// 5:创建模型对象   对文档操作的封装对象let userModel = mongoose.model("user", userSchema)// 6: 新增userModel.create({name: '赵六',age: 99,sex: '男'}, function (err, data){// err 判断是否有错误if (err) {console.log(err)return;} console.log(data);})
}, () => {console.log('连接失败');
})

3、代码图示说明

在这里插入图片描述

四、在index.js 中进一步的拆分

1.拆分原因

user文档的其他操作会导致这部分逻辑重复了,需要拆分

在这里插入图片描述

2.新建model文件夹存储文档的结构对象

将要创建的同一对象放到js中暴露出来,后面引用可以重复使用。
注意点:需要在使用的页面(index.js)中引入该模块名。
在这里插入图片描述

3.代码

model>userModel.js

const mongoose = require('mongoose')// 创建文档的结构对象
let userSchema = new mongoose.Schema({name: String,age: Number,sex: String
})
// 创建模型对象   对文档操作的封装对象
let userModel = mongoose.model("user", userSchema)// 暴露模型对象
module.exports = userModel; 

index.js

// 1:导入mongoose 
const mongoose = require('mongoose')
// 2:导入db文件
const db = require('./db/db')
// 导入userModel模块
const userModel = require('./model/userModel')
// 3:调用函数(参数1为成功回调,参数2为失败回调)
db(() => {console.log('index.js中的连接成功');// 6: 新增userModel.create({name: '沈七',age: 108,sex: '男'}, function (err, data){// err 判断是否有错误if (err) {console.log(err)return;} console.log(data);})
}, () => {console.log('连接失败');
})

4.代码实际演示和注意点

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/179847.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于安卓android微信小程序的装修家装小程序

项目介绍 巧匠家装小程序的设计主要是对系统所要实现的功能进行详细考虑,确定所要实现的功能后进行界面的设计,在这中间还要考虑如何可以更好的将功能及页面进行很好的结合,方便用户可以很容易明了的找到自己所需要的信息,还有系…

Python交易-通过Financial Modeling Prep (FMP)选择行业

介绍 在您的交易旅程中,无论您是在寻找理想的股票、板块还是指标,做出明智的决策对于您的成功至关重要。然而,收集和分析所需的大量数据可能相当艰巨。财务建模准备 (FMP) API的

CentOS7 安装IPFS

1、查看CPU架构 uname -m 2、下载软件 软件主页:IPFS Distributions 根据CPU架构x86_64选择Linux版本64位 系统执行下载命令: wget https://dist.ipfs.tech/kubo/v0.24.0/kubo_v0.24.0_linux-amd64.tar.gz 3、解压软件 创建解压目录&#xff1a…

金蝶云星空表单插件获取控件值

文章目录 金蝶云星空表单插件获取控件值获取主键获取文本获取日期获取数值获取基础资料 金蝶云星空表单插件获取控件值 获取主键 正确: this.View.Model.GetPKValue();错误: 获取文本 this.View.Model.GetValue("FBILLNO")获取日期 thi…

协采云代理IP有什么池模式?

共享池多人共同使用,成本低廉,支持池弹性扩容,24小时源源不断供应IP。独享池 仅一人独立使用,支持自定义IP数量、时效、验证方式、IP位置等。客户涵盖大数据、互联网传媒、征信、电商、金融、旅游、教育等行业。

如何用Python实现图像拼接画(把一堆小图拼成大图)

诸神缄默不语-个人CSDN博文目录 在这里的图像拼接画指的是一张大图由很多小图组成,效果就像这样: 原理:将大图拆成很多小块,每一块计算平均颜色,用平均颜色最相近的小图来替代,就可以。 直接遍历就可以&…

CNVD-2021-09650:锐捷NBR路由器(guestIsUp.php)RCE漏洞复现 [附POC]

文章目录 锐捷NBR路由器guestIsUp.php远程命令执行漏洞(CNVD-2021-09650)复现 [附POC]0x01 前言0x02 漏洞描述0x03 影响版本0x04 漏洞环境0x05 漏洞复现1.访问漏洞环境2.构造POC3.复现 锐捷NBR路由器guestIsUp.php远程命令执行漏洞(CNVD-2021-09650)复现 [附POC] 0x01 前言 免…

rocketmq5.X 单机搭建 虚拟机搭建rocketmq5.1.4 搭建最新版本mq rocketmq5.1.4版本单体搭建 rocketmq(一)

1. 官网下载地址: 下载 | RocketMQ 2. 配置环境: 我是在/etc/profile.d 新建了一个rocketmq_env.sh 配置了jdk, maven, 以及mq. mq文件下载的 配置完之后,刷新环境source /etc/profile 3. 配置rocket mq 的jvm配置,就是两个启…

LTV预测算法从开发到上线,浅谈基于奇点云DataSimba的MLOps实践

今年8月,StartDT旗下GrowingIO分析云产品客户数据平台(CDP)正式上线了LTV预测标签。通过开箱即用的标签功能,分析师就能一键生成用户价值的预测结果,用于用户运营和价值分析。 LTV预测标签背后是怎样的算法&#xff1…

RDkit | 安装报错及使用

关于RDKit的学习及介绍: RDKit安装 基础教程:[Getting Started with RDKit in Python] RDkit四:数据处理过程中smiles编码的清洗统一化 reticulate-R Interface to Python 在RStudio中加载 rdkit.Chem和rdkit.Chem.rdmolops 时,报…

内网穿透工具NPS(保姆级教程)

前言: 有时候我们受限于硬件设备和网络的的问题,无法将内网的大容量、高性能存储设备或计算设备对外访问。这个时候就会变的特别苦恼,上云呢成本太大,不用云呢公网又无法直接访问,这个时候怎么办呢,NPS它来…

个人微信机器人接口

请求URL: http://域名地址/modifyGroupName 请求方式: POST 请求头Headers: Content-Type:application/jsonAuthorization:login接口返回 参数: 参数名必选类型说明wId是String登录实例标识chatRoom…