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



    一、使用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:安装并导入mongoose
        const  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('连接关闭');
        })
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33

    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('连接失败');
    })
    
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34

    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; 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    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('连接失败');
    })
    
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27

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

    在这里插入图片描述

  • 相关阅读:
    Flink开发语言使用Java还是Scala合适?
    电脑屏幕实时监控软件有哪些(监控电脑操作的软件叫什么?)
    完全数(Perfect number),又称完美数或完备数,是一些特殊的自然数。它所有的真因子(即除了自身以外的约数)的和,恰好等于它本身。
    Java基础复习巩固(二)
    Pytorch Lighting 库的学习 mvsplat 的笔记
    力扣第51题 N 皇后 c++ 难~ 回溯题
    flutterdart chacha20加密
    TouchGFX界面开发 | 添加触摸屏驱动
    如何翻译语音?分享几个翻译语音的方法
    Spring源码--容器的基本实现与BeanDefinition
  • 原文地址:https://blog.csdn.net/weixin_44784401/article/details/134105540