手把手使用 Egg+TypeScript+mongoDB快速实现增删改查

2023-05-16

创建一个Egg的TS项目(Egg.js官方教程)

安装MogoDB Egg 依赖

npm install  egg-mongoose -g

也可以在某个文件中测试mongoDB链接

import mongoose = require('mongoose');
mongoose.connect('mongodb://127.0.0.1:27017/test');
const con = mongoose.connection;
con.on('error', console.error.bind(console, '连接数据库失败'));
con.once('open', () => {
  console.log('连接成功');
});

下载完成后添加对应mongodb插件到Egg 中

app/congif/plugin.ts 文件中添加

import { EggPlugin } from 'egg';

const plugin: EggPlugin = {
  mongoose: {
    enable: true,
    package: 'egg-mongoose',
  },
};

export default plugin;

app/congif/config.default.ts 中添加

  config.mongoose = {

    client: {
      url: 'mongodb://127.0.0.1:27017/test', // test是数据库得名字
      options: {
        useNewUrlParser: true,
      },
    },
  };

在这里插入图片描述

新建模型(model)文件夹 在app文件夹下面

app/model/article.ts

export default app => {
  const mongoose = app.mongoose;
  const Schema = mongoose.Schema;
  // 验证规则
  const ArticleSchema = new Schema({
    sendMessage: {
      type: String,
      minlength: [ 2, '字符串度不能小于2' ],
      maxlength: [ 10, '字符串度不能大于10' ],
    },
    id: {
      type: Number,
      // 主键必填
      required: [ true, '传入ID' ],
    },
    type: {
      type: String,
      minlength: [ 2, '字符串度不能小于2' ],
      maxlength: [ 5, '字符串度不能大于10' ],
    },
  }, { versionKey: false });

  return mongoose.model('Article', ArticleSchema, 'artcle'); // Article在service中调用的名称 ArticleSchema是验证的字段规则  artcle是你数据集合表的名称
};

在控制器(controller)文件夹中添加 article.ts 文件

app/controller/article.ts

import { Controller } from 'egg';


export default class articleController extends Controller {
  // 获取列表
  async index() {
    const { ctx } = this;
    const res = await ctx.service.article.getProjectById();
    ctx.body = res; // 返回值显示
  }
  // 添加数据
  async addmongDB() {
    const { ctx } = this;
    const dataList = await ctx.service.article.add();
    ctx.body = {
      status: 200,
      data: dataList,
    };
  }

  // 根据id 查询
  async asyncid() {
    const { ctx } = this;
    const { id } = ctx.request.body || {};
    ctx.body = await ctx.service.article.searchID(id);
  }
  // 修改数据
  async updateData() {
    const { ctx } = this;
    const { id, type, sendMessage } = ctx.request.body || {};
    ctx.body = await ctx.service.article.updata(id, type, sendMessage);
  }
  // 删除
  async deleId() {
    const { ctx } = this;
    const { id } = ctx.request.body || {};
    ctx.body = await ctx.service.article.deleId(id);
  }
}

在服务(service)文件夹中新建 article.ts

app/service/article.ts

import { Service } from 'egg';

export default class blogdbService extends Service {

  public async getProjectById() {
    const { ctx } = this;
    try {
      const results = await ctx.model.Article.find();
      return results;
    } catch (err) {
      console.log('Service -Error ', err);
      ctx.body = JSON.stringify(err);
    }
  }

  // 根据id 查询数据
  public async searchID(id: number) {
    const { ctx } = this;
    try {
      console.log('searchID--->', id);

      const results = await ctx.model.Article.find({ id }, { sendMessage: 1, id: 1, tyep: 1, _id: 0 });
      return results;
    } catch (err) {
      console.log('Service -Error ', err);

      ctx.body = JSON.stringify(err);
    }
  }

  // 添加数据
  public async add() {
    const { ctx } = this;
    try {
      const addBlog = new ctx.model.Article({ id: 99, type: 'video', sendMessage: '视频播放' });
      return await addBlog.save();
    } catch (error) {
      console.log('Service - add -Error ', error);
      return error;
    }
  }
  // 修改数据
  public async updata(id: any, type: any, sendMessage: any) {
    const { ctx } = this;
    try {
      await ctx.model.Article.updateOne({ id }, { type, sendMessage }, {}, (Err: any, result: any) => {
        console.log(Err, result);

      });
    } catch (error) {
      console.log('Service - add -Error ', error);
      return error;
    }
  }
  // 删除
  public async deleId(id) {
    const { ctx } = this;
    try {
      await ctx.model.Article.deleteOne({ id });
    } catch (error) {
      console.log('Service - add -Error ', error);
      return error;
    }
  }
}

标题注入路由

import { Application } from 'egg';

export default (app: Application) => {
  const { controller, router, middleware } = app;

  router.get('/article', controller.article.index);
  router.get('/articleAdd', controller.article.addmongDB);
  router.post('articleid', controller.article.asyncid);
  router.post('/articleupdate', controller.article.updateData);
  router.post('/articledeleId', controller.article.deleId);
};

在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

手把手使用 Egg+TypeScript+mongoDB快速实现增删改查 的相关文章

随机推荐

  • OpenCV3的程序转到OpenCV4下进行编译出现的一些问题解决方法

    文章目录 写在前面一 报错 96 CV INTER LINEAR was not declared in this scope 96 1 问题描述2 解决方法 二 报错 96 CV RANSAC was not declared in th
  • c# http请求使用multipart/form-data 方式上传文件及其他参数

    这次的需求是请求java那边的一个excel批量上传的接口 但是他们的接口要求是这样的 于是自己写了个方法 xff1a 调用 xff1a 控制器层 var file 61 this HttpContext Request Files 0 获
  • C++设计模式七、生产者消费者模式(单生产单消费)。

    前言 xff1a 生产者消费者模式在 大话设计模式 一书中并没有涉及 可奈何在工作中很多地方都要用到 此模式的例子基本都相似 xff0c 在网上找了一篇博客 xff08 原文 xff09 xff0c 在此进行剖析 xff0c 写此篇博文学习
  • 网络爬虫-cloudflare五秒等待验证逆向破解

    Cloudflare是国外的一家安全防护公司 xff0c 最近在很多网站上也看到了他的身影 xff0c 比较明显的特征就是让你等待5秒钟以验证你是否是真实的浏览器 以 https www biovision com 为例 另一个明显的特征就
  • VNC的使用

    1 安装 yum install tigervnc server x86 64 2 配置 客户机和远程vnc桌面间的复制粘贴 参考 xff1a VNC怎么和宿主机共享粘贴板 整理 cxcbupt CSDN博客 3 日常使用 1 解决远程桌面
  • WPF异常处理详解

    总目录 文章目录 总目录一 WPF异常1 未捕获异常2 模拟未捕获异常场景 二 处理未捕获异常1 DispatcherUnhandledException 异常捕获2 UnhandledException异常捕获3 UnobservedTa
  • javafx 多线程赛马设计

    根据上一篇博客的内容 xff0c 这篇将展示设计过程 xff1a 二 xff0e 概要设计 2 1 系统流程图 2 2 功能模块图 2 3 赛马程序模拟程序初始化模块 在这一模块当中 xff0c 要求使用者选择当局需要赛马的马匹数量 xff
  • Cannot find module 'vue-loader/lib/plugin'

    安装了 webpack4 的版本之后发现报这个错 Cannot find module vue loader lib plugin 然后上node modules 里找了一下还真没有 plugin xff0c 所以我肯定是 vue load
  • ubuntu16.04 安装配置python3.6

    在Ubuntu下 xff0c 时不时会有这个错误的 add apt repository command not found 这个是缺少程序 xff0c 安装一下就可以了 只是不知道安装的名字 按以下命令走一趟就可以的了 sudo apt
  • 最新最快最简单解决rosdep更新失败问题

    在安装ros的时候 xff0c 最后一步会由于源在国外 xff0c sudo rosdep init会失败 xff0c 其中一种方式是通过加https ghproxy com 代理的方式 xff0c 参考链接 我之前也都是这样做的 xff0
  • 解决wsl无法同步本地代理的dns信息

    问题 本地开了公司的vpn xff0c 使用vscode的remote wsl插件连接wsl1 xff0c 结果wsl里面无法解析公司内部的一些域名 xff0c 查了下发现原来是wsl无法自动同步本地代理的dns信息 wsl2没有这个问题
  • 如何在Oracle官网下载jdk

    Oracle官方网址 xff1a Oracle Cloud Applications and Cloud Platform 注册账号 xff1a 登录进入首页 xff1a 点击Products xff1a 来到Products页面 xff0
  • ubuntu安装字体

    先安装 span class token function sudo span span class token function apt get span span class token function install span y
  • windows 压缩指定目录下每个目录和文件为zip文件的powershell脚本

    某个文件夹下有几十个子文件夹 xff0c 想要单个压缩每个子文件夹备份到云盘 如果手动操作会有点累 xff0c 尝试写个脚本吧 版本 适用于win10 win11 其他版本未测试 一 编写脚本 众所周知windows下有两种自带脚本cmd和
  • SpringMVC的配置和执行流程

    要想成功的配置和调试springmvc xff0c 了解掌握它的执行流程是必不可少的 xff0c 话不多说 xff0c 看下图 xff1a 我们边说执行边讲配置 xff0c 首先 xff0c 想要使用springmvc xff0c 依赖是必
  • Maven安装与配置详解、多镜像节点的配置

    下载 Maven是Apache下面的一个项目 xff0c 官网下载地址 xff1a https maven apache org download cgi 历史版本下载地址 xff1a https archive apache org di
  • 使用FTPClient上传文件到ftp服务器。并解决图片损坏问题。

    1 先借鉴此博客的方法 xff08 此博客的方法上传txt文件没有问题 xff0c 但是上传的图片文件会损坏 xff09 https blog csdn net weixin 37196194 article details 5500166
  • libnet的使用详解

    最近搬砖需要对libnet进行介绍在这里对知识进行汇总 1 libnet简介 在 libnet 出现以前 xff0c 如果要构造数据包并发送到网络中 xff0c 程序员要通过一些复杂的接口来处理 libnet 的出现 xff0c 为程序员提
  • electron启动报错

    一个简单的程序启动居然报错了 xff0c 那就排查原因吧 xff0c 搜索网上的资料没有一个一样的 xff0c 大致类似的说的是electron版本和node不一致 还有说是electron的版本问题 但排查后都不是 xff0c 最后我把m
  • 手把手使用 Egg+TypeScript+mongoDB快速实现增删改查

    创建一个Egg的TS项目 xff08 Egg js官方教程 xff09 安装MogoDB Egg 依赖 span class token function npm span span class token function install