eggjs+egg-mongoose操作mongodb数据库

使用的数据库是mongodb数据库,mongodb的数据库表创建就不一一介绍了,可自行查询资料如何创建数据库。

使用的数据库可视化工具是mongodb compass

使用的接口工具是postman

这里使用的egg项目脚手架模板是simple版本,详细创建项目流程可在eggjs官网查阅

1、首先安装egg-mongoose

npm i egg-mongoose

2、在config/config.default.js,配置数据库的地址,以及一些请求跨域的配置

config.mongoose = {
    client: {
      url: 'mongodb://localhost:27017/codemodel',
      options: {
        useUnifiedTopology: true,
      },
    }

  };
// EGG 安全配置
  config.security = {
    csrf: {
      enable: false
    }
  };
config.cors = {
    origin: '*',
    allowMethods: 'GET,HEAD,PUT,POST,DELETE,PATCH,OPTIONS',
    credentials: true
  };

3、在config/plugin.js,配置egg-mongoose

/** @type Egg.EggPlugin */
module.exports = {
  mongoose: {
    enable: true,
    package: 'egg-mongoose'
},
};

4、在config/code.js,配置一些请求返回码

module.exports={
    DEFAULT: {
        DEMO: 100001
    },
}

在config/config.default.js配置

const code = require('./code.js')
config.CODE = code;

5、在app/extend/context.js,编写一些扩展方法

// 在 app/extend/context.js 文件中定义扩展方法
module.exports = {
    success(data) {
      this.body = {
        code: 0,
        message: 'success',
        data,
      };
    },
    error(code, message) {
        this.body = {
          code,
          message,
        };
      },
  };
  

6、创建数据表model

app/model/collectdbs.js

module.exports = app => {
    const mongoose = app.mongoose;
    const Schema = mongoose.Schema;
  
    const CollectSchema = new Schema({
      filePath: { type: String  },
      fileName: { type: String  },
      fileCreateAt: { type: String  },
      fileUrl: { type: String  },
      account: { type: String  },
      collectName: { type: String  },
      fileUpdateAt:{ type: String  },

    });
    
  
    return mongoose.model('Collectdbs', CollectSchema,'collectdbs');
  }

7、编写service

app/service/collectdbs.js

这里使用了lodash,安装lodash

npm i lodash
const { Service } = require('egg')
const _ = require('lodash')
class CodeModelService extends Service {
    //查
    async list() {
        const { ctx } = this;
        return ctx.model.Collectdbs.find()
    }
    //更新
    async update(params) {
        const _params = _(params).omitBy(_.isUndefined).omitBy(_.isNull).value();
        console.log(params)
        return this.ctx.model.Collectdbs.updateOne(
            {
                _id: params._id
            },
            _params
        );
    }
    //删除
    async delete(params) {
        return this.ctx.model.Collectdbs.deleteOne(params);
    }
    //新增
    async create(params) {
        return this.ctx.model.Collectdbs.insertMany(params);
    }
}
module.exports = CodeModelService;

8、编写对应controller

app/controller/collectdbs.js

这里用到了dayjs,安装dayjs

npm i dayjs
const { Controller } = require('egg');
const dayjs = require('dayjs');
class CollectdbsModel extends Controller {
    //查
    async list() {
        const { ctx, service, config } = this;
        try {
            const result = await service.collectdbs.list();
            ctx.success(result);
        } catch (error) {
            ctx.error({
                code: config.CODE.DEFAULT.DEMO,
                message: error
            })
        }
    }
    //更新
    async update(){
        const { ctx, service, config } = this;
        const _id = ctx.request.body?._id;
        const collectName = ctx.request.body?.collectName;
        const updateTime = dayjs().format('YYYY-MM-DD HH:mm:ss'); 
        const params={
            _id,
            collectName,
            fileUpdateAt:updateTime
        }
        try {
            const result = await service.collectdbs.update(params);
            ctx.success(result);
        } catch (error) {
            ctx.error({
                code: config.CODE.DEFAULT.DEMO,
                message: error
            })
        }
    }
    //删除
    async delete(){
        const { ctx, service, config } = this;

        const _id = ctx.request.body?._id;

        try {
            await service.collectdbs.delete({_id});
            ctx.success({});
        } catch (error) {
            ctx.error({
                code: config.CODE.DEFAULT.DEMO,
                message: error
            });
        }
    }
    //创建
    async create(){
        const { ctx, service, config } = this;
        const {collectName,fileName,account,fileUrl,filePath}=ctx.request.body;
        const updateTime = dayjs().format('YYYY-MM-DD HH:mm:ss'); 
        const params={
            collectName,fileName,account,fileUrl,filePath,fileCreateAt:updateTime,fileUpdateAt:updateTime
        }
        try {
            const result = await service.collectdbs.create(params);
            ctx.success(result);
        } catch (error) {
            ctx.error({
                code: config.CODE.DEFAULT.DEMO,
                message: error
            });
        }
    }

}
module.exports = CollectdbsModel;

9、编写对应的router.js

app/router.js

/**
 * @param {Egg.Application} app - egg application
 */
module.exports = app => {
  const { router, controller } = app;
  router.get('/collectdbs/list', controller.collectdbs.list);
  router.post('/collectdbs/update',controller.collectdbs.update)
  router.post('/collectdbs/delete',controller.collectdbs.delete)
  router.post('/collectdbs/create',controller.collectdbs.create)

};

10、运行项目

npm run dev

11、效果展示

新增数据

查找数据

删除数据

删除_id为65efc1b63ecbf05aacf9378b

更新数据

修改_id为65efcc3746e1b1e601536e00

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Redis常见数据类型下

目录 Hash 哈希 常用指令 HSET HGET HEXISTS HDEL HKEYS HVALS HGETALL HMGET 内部编码 Hash类型和关系型数据库 缓存方式对比 List 列表 特点 常用命令 LPUSH LPUSHX RPUSH RPUSHX LRANGE LPOP / RPOP LINDEX LINSERT 阻塞(BLOCK)版…

【Python】新手入门学习:什么是工作目录?

【Python】新手入门学习:什么是工作目录? 🌈 个人主页:高斯小哥 🔥 高质量专栏:Matplotlib之旅:零基础精通数据可视化、Python基础【高质量合集】、PyTorch零基础入门教程👈 希望得…

数据库不应放在容器中?- B站Kubernetes有状态服务实践(Elasticsearch/Clickhouse)

本期作者 前言 云原生时代下, Kubernetes已成为容器技术的事实标准, 使得基础设施领域应用下自动化运维管理与编排成为可能。对于无状态服务而言, 业界早已落地数套成熟且较完美的解决方案。可对于有状态的服务, 方案的复杂度就以…

StringBuilder --java学习笔记

StringBuilder 代表可变字符串对象,相当于是一个容器,它里面装的字符串是可以改变的,就是用来操作字符串的StringBuilder比String更适合做字符串的修改操作,效率会更高,代码也会更简洁 StringBuilder的常用构造器和方…

分享8款高效办公软件,让你准时下班

在现代职场中,办公软件已经成为我们日常工作中不可或缺的一部分。选择适合自己、高效且实用的办公软件,能大大提升我们的工作效率,从而帮助我们更好地平衡工作与生活。今天给大家分享8款高效办公软件,让你准时下班成为可能。 01、…

29 残差网络 ResNet【李沐动手学深度学习v2课程笔记】

目录 1. ResNet 1.1 残差块 1.2 ResNet块 1.3 总结 2. 代码实现 2.1 残差块 2.2 ResNet模型 2.3 训练模型 3. 小结 1. ResNet 1.1 残差块 只有当较复杂的函数类包含较小的函数类时,我们才能确保提高它们的性能。 1.2 ResNet块 五个stage 只不过是ResNet块…

Docker学习——Dock镜像

什么是Docker镜像 Docker 镜像类似于虚拟机镜像,可以将它理解为一个只读的模板。 一个镜像可以包含一个基本的操作系统环境,里面仅安装了 Apache 应用程序(或 用户需要的其他软件) 可以把它称为一个 Apache 镜像。镜像是创建 Do…

POS 之 提款密钥与验证者密钥

回顾之前的文章 文章标题文章地址🍧ETH网络中的账户https://blog.csdn.net/weixin_29491885/article/details/136318898🍨我们为什么需要助记词https://blog.csdn.net/weixin_29491885/article/details/135860211🧁一组助记词走遍天下也不怕…

嵌入式学习第二十六天!(网络传输:TCP编程、HTTP协议)

TCP通信: 1. TCP发端: socket -> connect -> send -> recv -> close 2. TCP收端: socket -> bind -> listen -> accept -> recv -> send -> close 3. TCP需要用到的函数: 1. co…

excel函数

1.VLOOKUP(B2.[测试部门.xls]结果集!$A:$C,1,FALSE)

2023年第三届中国高校大数据挑战赛第二场赛题D题赛题:行业职业技术培训能力评价(成品论文 代码与思路 视频讲解)

赛题 中国是制造业大国,产业门类齐全,每年需要培养大量的技能娴熟的技术工人进入工厂。某行业在全国有多所不同类型(如国家级、省级等)的职业技术培训学校,进行 5 种技能培训。学员入校时需要进行统一的技能考核&…

node管理器 nvm

需求背景:如果出现多个项目 不同项目使用的node版本不一致 需要切换node版本 如果每次单独下载对应的node版本太过于麻烦,使用nvm可以下载多个node版本,通过nvm切换控制使用哪个node版本 nvm下载地址:https://github.com/coreybut…

0-13 - 准备:智能指针类和异常类

---- 整理自狄泰软件唐佐林老师课程 文章目录 1. 智能指针示例1.1 内存泄漏(臭名昭著的Bug )1.2 当代 C 软件平台中的智能指针1.3 智能指针的设计方案1.4 智能指针的使用军规1.5 编程实验:智能指针示例 2. 异常类构建2.1 现代 C 库必然包含充…

蜂窝物联:智慧畜牧养殖解决方案

我国是一个畜牧大国,在实现畜牧业发展的过程中,面临着企业生产管理水平低、政府监管薄弱、环境污染、行业数据资源分散等问题,阻碍了现代畜牧业的快速发展。 近年来,蜂窝物联针对畜牧业的发展现状,借助新一代物联网和…

华为OD七日集训第2期 - 按算法分类,由易到难,循序渐进,玩转OD

目录 一、适合人群二、本期训练时间三、如何参加四、七日集训第 2 期五、精心挑选21道高频100分经典题目,作为入门。第1天、逻辑分析第2天、字符串处理第3天、矩阵第4天、深度优先搜索dfs算法第5天、回溯法第6天、二分查找第7天、双指针 大家好,我是哪吒…

新闻媒体软文发布,提升企业宣传效果的最佳方法!

在新闻媒体上发布宣传效果确实很高,可以帮助企业提高宣传效果,为企业打开知名度。迅推客新闻媒体软文发布有很多优势。如果写软文推广公司,可以有很多方法,比如用软文推广公司产品,介绍公司产品的亮点,其实…

【QT+QGIS跨平台编译】之七十一:【QGIS_Analysis跨平台编译】—【qgsrastercalclexer.cpp生成】

文章目录 一、Flex二、生成来源三、构建过程一、Flex Flex (fast lexical analyser generator) 是 Lex 的另一个替代品。它经常和自由软件 Bison 语法分析器生成器 一起使用。Flex 最初由 Vern Paxson 于 1987 年用 C 语言写成。 “flex 是一个生成扫描器的工具,能够识别文本中…

一口气看完西汉210年历史

1、刘邦建国 公元前202,刘邦在垓下之战中击败楚王项羽,终结了历时7年的秦末大乱,建立西汉王朝。 西汉全盛时期地图 公元前201年,匈奴单于冒顿引兵攻打太原,异姓诸侯王之一的汉王信战败投降,刘邦被迫亲自率…

Python·算法·每日一题(3月12日) 删除链表的倒数第 N 个结点

题目 给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点。 示例 示例 1: 输入:head [1,2,3,4,5], n 2 输出:[1,2,3,5]示例 2: 输入:head [1], n 1 输出:[]示例…

server win搭建apache网站服务器+php网站+MY SQL数据库调用电子阅览室

一、适用场景: 1、使用开源的免费数据库Mysql; 2、自己建网站的发布; 3、使用php代码建网站; 4、使用windows server作为服务器; 5、使用apache作为网站服务器。 二、win server 中apache网站服务器搭建 &#xff0…