egg初始化搭建swagger项目

2023-11-10

安装node

  • Node.js 官网下载长期支持版本(LTS结尾的版本)

安装你喜欢的编辑器

  • Visual studio code、
  • Atom

初始化项目

创建一个文件夹,打开命令提示符 cmd

npm init

在这里插入图片描述
设置完成之后,生成package.json文件

输入安装 egg 命令

npm install egg --save

输入安装 egg-dev 命令

npm install egg-bin --save-dev

修改 package.json

 "scripts": {
    "dev": "egg-bin dev  -port 7001" // port为端口,默认为7001
 },

基本目录结构(需手动创建)

项目名称
├── app
│ ├── controller(控制器)
│ │ └── home.js
│ ├── service(业务逻辑)
│ ├── extend(公共方法)
│ ├── contract(返回值约束)
│ └── router.js(路由)
├── config(配置)
│ └── config.default.js(配置项,项目基本配置,数据库的链接,egg-swagger-doc配置)
│ └── plugin.js(第三方插件配置,引用,开启状态)
└── package.json

输入安装 egg-sequelize 命令

npm install --save egg-sequelize // 链接数据库插件 
npm install egg-sequelize-auto --save-dev // 对照数据库自动生成相应的models插件
npm install mysql2 --save // 数据库插件

数据库选择

  • 数据库建议使用HaoSql,数据库管理软件建议使用SQLyog

配置 sequelize 插件

//app/config/config.default.js
module.exports.keys = "Render"; // 配置项目关键字

exports.sequelize = {
    dialect: 'mysql',   // 数据库类型,支持 mysql,sqlite,mssql,pgsql,oracle
    host: "localhost",  // 数据库服务器地址
    port: 3306, // 数据库连接端口号
    database: "library", // 数据库名称
    username: "root",   // 数据库登录用户名
    password: "haosql",   // 数据库登录密码
    define: {
        freezeTableName: true, // 阻止数据表名变为复数
        timestamps: false // 阻止model生成createAt和updateAt字段
    }
};
// app/config/plugin.js
// 配置 egg-sequelize 插件信息
exports.sequelize = {
    enable: true, // 默认启用
    package: 'egg-sequelize' // 指定启用的包名称
}

修改package.json

 "scripts": {
    "dev": "egg-bin dev  -port 7001"
    "dbinit": "egg-sequelize-auto -o ./app/model -h localhost -p 3306 -d library -u root -x haosql" 
 },

egg-sequelize-auto 指令解释

  • -o:模型生成的文件夹路劲
  • -h :数据库地址
  • -d :数据库名
  • -u :用户名
  • -x :密码
  • -p:端口号

生成对照数据库相应的models

npm run dbinit // 此指令名称是自定义
  • 数据库模型的创建,会经常报错。

输入安装 egg-swagger-doc

npm i egg-swagger-doc --save // 自动生成接口描述配置

配置 egg-swagger-doc

// config/config.default.js
exports.swaggerdoc = {
    dirScanner: './app/controller', // 配置自动扫描的控制器路径
    // 接口文档的标题,描述或其它
    apiInfo: {
        title: 'Render',  // 接口文档的标题
        description: 'swagger-ui for Render document.',   // 接口文档描述
        version: '1.0.0',   // 接口文档版本
    },
    schemes: ['http', 'https'], // 配置支持的协议
    consumes: ['application/json'], // 指定处理请求的提交内容类型(Content-Type),例如application/json, text/html
    produces: ['application/json'], // 指定返回的内容类型,仅当request请求头中的(Accept)类型中包含该指定类型才返回
    securityDefinitions: {  // 配置接口安全授权方式
        // apikey: {
        //   type: 'apiKey',
        //   name: 'clientkey',
        //   in: 'header',
        // },
        // oauth2: {
        //   type: 'oauth2',
        //   tokenUrl: 'http://petstore.swagger.io/oauth/dialog',
        //   flow: 'password',
        //   scopes: {
        //     'write:access_token': 'write access_token',
        //     'read:access_token': 'read access_token',
        //   },
        // },
    },
    enableSecurity: false,  // 是否启用授权,默认 false(不启用)
    // enableValidate: true,    // 是否启用参数校验,默认 true(启用)
    routerMap: true,    // 是否启用自动生成路由,默认 true (启用)
    enable: true,   // 默认 true (启用)
};
// config/plugin.js
// 配置 egg-swagger-doc 插件信息
module.exports.swaggerdoc = {
    enable: true,   // 启用 swagger-ui 默认启用
    package: 'egg-swagger-doc', // 指定 第三方插件 包名称
};

创建业务逻辑层

// app/service/home.js
const { Service } = require('egg'); //拿到 egg 对象的Service基类
  • 所有的业务逻辑都在业务层设置完成,在控制层只是调用相应的方法即可
// app/service/home.js
class HomeService extends Service{
    constructor(ctx,tableName){
        super(ctx); // 继承上下文
        this.tableName = tableName; 
        this.datebase = this.ctx.model[tableName]; // 根据表名获得相应的数据模型
    }

    /**
     * 根据id主键查询数据
     * @param {*} id 
     */
    async getById(id){
        const entity = await this.datebase.findByPk(id); // 根据id主键查询数据
        return entity; //将结果集返回
    }
}
module.exports = HomeService; //将业务逻辑暴露

创建控制器(api接口)

// app/controller/home.js
const { Controller } = require('egg'); //解构出 Controller 基类
// app/controller/home.js
/**
 * @controller HomeService home接口
 */
class HomeController extends Controller{
    /**
    * @summary 根据Id获取信息
    * @description 根据Id获取信息
    * @router get /v1/book/getBook
    * @request query integer Id ID
    * @response 200 JsonResult 操作结果
    */
    async getBook(){
        const { ctx,service } = this; //解构出应用上下文和业务逻辑
        const id = ctx.query.Id; //获取参数
        const result = await service.home.getById(id); //使用业务逻辑层的方法返回值
        ctx.body = result; //JsonResult 返回结果必须进行处理
    }
}
module.exports = HomeController;

配置接口返回值的约束(必须配置)

//app/contract/type.js
module.exports = {
        // 默认接口类型
        JsonResult: { //@response 200 JsonResult 操作结果,名字与相应结果对应
            success: { type: 'boolean' },    // 结果
            results: { type: 'string' }     // 服务器返回的数据
        },
}

配置路由router.js

// app/router.js
module.exports = app => { //ES6
    app.router.redirect('/', '/swagger-ui.html' , 302); //重定向到swagger-ui.html
}

项目搭建完成

npm run dev //运行

总结

  • 项目搭建流程,主要是egg相关的各个插件
  • egg、egg-bin、egg-sequelize、egg-swagger-doc、egg-sequelize-auto
  • 数据库 mysql2
  • 在package.json配置命令行,运行。
  • 在config中引用配置插件信息
  • 生成数据库模型、创建业务逻辑层,创建控制层,创建返回值约束
  • 业务逻辑层尽量使用sql语句来编写,操作灵活,清晰。
  • 需要熟练sql语言,链表查询,条件查询等较复杂的逻辑。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

egg初始化搭建swagger项目 的相关文章

随机推荐

  • Kubernetes------YAML

    K8S YAML K8S 一 YAML语法格式 查看api 资源版本标签 二 写一个yaml文件demo 创建资源对象 deployment yaml文件详解 Pod yaml文件详解 Service yaml文件详解 Kubernetes
  • springMVC接收ajaxfileupload提交数据不执行success回调的问题解决

    采用ajaxfileupload插件提交表单 前端js写法如下 ajaxFileUpload url base submit ajaxfileupload do secureuri false fileElementId uploadFil
  • 正版方舟建服务器,搭建ARK服务器

    Loading 参考文章 CentOS 7 x 快速搭建ARK服务器 1 更新系统 yum update y 安装窗口会话工具 可以让你在退出ssh后保留当前运行的服务端 已安装或有其他工具的请跳过 yum install screen 安
  • ❀OSPF协议面试题总结❀

    文章目录 一 简单介绍下ospf 二 ospf的骨干区域有什么用 为什么要划分一个骨干区域 三 ospf的状态机 四 ospf的lsa有几种 五 ospf路由的生成过程 六 介绍ospf的虚链路 一 简单介绍下ospf 开放式最短路径优先协
  • 力扣2594.修车的最少时间

    题目描述 给你一个整数数组 ranks 表示一些机械工的 能力值 ranksi 是第 i 位机械工的能力值 能力值为 r 的机械工可以在 r n2 分钟内修好 n 辆车 同时给你一个整数 cars 表示总共需要修理的汽车数目 请你返回修理所
  • Android ApiDemos示例解析(87):Media->MediaPlayer

    本例介绍了如何使用MediaPlayer类来播放声音或是视频 涉及的Activity有三个 MediaPlayerDemo 主Activity 显示示例列表 MediaPlayerDemo Audio 子Activity 用于播放声音 在L
  • ConcurrentHashMap1.8总结

    Java8 ConcurrentHashMap结构基本上和Java8的HashMap一样 不过保证线程安全性 在JDK8中ConcurrentHashMap的结构 由于引入了红黑树 使得ConcurrentHashMap的实现非常复杂 我们
  • FPGA学习专栏-串口通信(xinlinx)

    FPGA学习专栏 串口通信 本系列文章基于开发板黑金A309 FPGA芯片为Xilinx公司的spartan6 本系列文章记录FPGA学习历程 文章目录 FPGA学习专栏 串口通信 一 串口通信原理 二 硬件设计 三 verilog代码编写
  • react之装饰器报错:This experimental syntax requires enabling one of the following parser plugin(s): “decor

    在学习mobx时 遇到了 This experimental syntax requires enabling one of the following parser plugin s decorators decorators legac
  • STM32F103ZET6【标准库函数开发】------17 DMA实验

    STM32F103ZET6有2个DMA控制器 DMA1有7个通道 DMA2有5个通道 各个通道对应的外设如下
  • Caused by: org.codehaus.groovy.control.MultipleCompilationErrorsException: startup failed解决方法

    前言 Android Studio 升级到最新版本后 构建项目时 构建失败 出现错误 Caused by org codehaus groovy control MultipleCompilationErrorsException star
  • MySQL的null与not null

    相信很多用了mysql很久的人 对这两个字段属性的概念还不是很清楚 一般会有以下疑问 我字段类型是not null 为什么我可以插入空值 为毛not null的效率比null高 判断字段不为空的时候 到底要 select from tabl
  • IDEA报错:Cannot start compilation: the output path is not specified for module “testSvnKit“.Specify th

    IDEA报错Cannot start compilation the output path is not specified for module testSvnKit Specify the output path in the Pro
  • List分组的两种方式

    java8之前List分组 假设有个student类 有id name score属性 list集合中存放所有学生信息 现在要根据学生姓名进行分组 public Map
  • 精确径向基(matlab工具箱)

    原文地址 精确径向基 matlab工具箱 作者 神经网络之家 作者 梁小h 日期 2015 10 26 09 30 47 0 lt 文档仅供查阅和简单了解 深入了解请关注神经网络之家发布的 神经网络教学视频 gt 精确径向基神经网络在mat
  • HTML详解连载(5)

    HTML详解连载 5 专栏链接 link http t csdn cn xF0H3 下面进行专栏介绍 开始喽 行高 设置多行文本的间距 属性名 属性值 行高的测量方法 行高 垂直居中 技巧 字体族 属性名 属性值 示例 扩展 font 复合
  • 学期总结-2018年上

    从现在开始 我需要养成一个写作的好习惯 之所以培养这个习惯 是因为 我开始发现我的一个重大缺陷 语言表达能力的欠缺 这种能力 在一般生活中并不会有太大的作用 而且很多时候 大部分人都体会不到其所带来的 破坏 这种破坏 会让你的交际陷入阻塞
  • 不能向服务器考文件,如何往云服务器考文件

    如何往云服务器考文件 内容精选 换一换 华为云帮助中心 为用户提供产品简介 价格说明 购买指南 用户指南 API参考 最佳实践 常见问题 视频帮助等技术文档 帮助您快速上手使用华为云服务 无法正常使用Cloud init 弹性云服务器获取M
  • 关于python爬虫逆向RPC的基础使用

    makeRequest function a b c d rpc使用的代码 function 防止重复创建websocket if window flagLX else window weiboLX makeRequest var ws n
  • egg初始化搭建swagger项目

    步骤 安装node 安装你喜欢的编辑器 初始化项目 输入安装 egg 命令 输入安装 egg dev 命令 修改 package json 基本目录结构 需手动创建 输入安装 egg sequelize 命令 数据库选择 配置 sequel