当前位置: 首页 > news >正文

Egg.js使用ejs快速自动生成resetful风格的CRUD接口

目前的插件能够自动生成egg的crud的都不太好用 我们自己写一个吧 ejs模块 也方便定制 

安装依赖

npm install ejs --save

ejs 是一个简单易用的模板引擎,常用于 Node.js 应用程序中

在项目根目录下创建 template/controller.ejs  模板文件

'use strict';const Controller = require('egg').Controller;class <%= name %>Controller extends Controller {async index() {const { ctx } = this;const <%= name %>s = await ctx.model.<%= name %>.findAll();ctx.body = <%= name %>s;}async create() {const { ctx } = this;const <%= name %> = await ctx.model.<%= name %>.create(ctx.request.body);ctx.body = <%= name %>;}async show() {const { ctx } = this;const <%= name %> = await ctx.model.<%= name %>.findByPk(ctx.params.id);ctx.body = <%= name %>;}async update() {const { ctx } = this;const <%= name %> = await ctx.model.<%= name %>.findByPk(ctx.params.id);await <%= name %>.update(ctx.request.body);ctx.body = <%= name %>;}async destroy() {const { ctx } = this;const <%= name %> = await ctx.model.<%= name %>.findByPk(ctx.params.id);await <%= name %>.destroy();ctx.status = 204;}}module.exports = <%= name %>Controller;

在项目根目录下创建 template/gen-controller.js  模板生成执行文件

个人习惯 model大写  其他层文件小写 

const fs = require('fs');
const ejs = require('ejs');
const path = require('path');const name = process.argv[2]; // 从命令行参数获取控制器名称
const template = fs.readFileSync(path.join(__dirname, 'controller.ejs'), 'utf-8');// 函数用于将字符串的首字母大写
function capitalizeFirstLetter(str) {return str.charAt(0).toUpperCase() + str.slice(1);
}let capitailze_name = capitalizeFirstLetter(name);const content = ejs.render(template, { name: capitailze_name });fs.writeFileSync(path.join(__dirname, `../app/controller/${name.charAt(0).toLowerCase() + name.slice(1)}.js`), content, 'utf-8');

上面的模板文件旨在生成restful接口  ,同时直接调用model ,在一些不复杂的场景中直接使用

配置路由文件app/router.js

// activationsrouter.resources("activations", "/activations", controller.activations)

最后 代码生成  restful的增删改查就直接生成好了 

node gen-controller.js activations

model层 通过 egg-sequelize-auto查询数据库直接生成  数据库表通过 npx 也是自动生成的 

总结 egg一整套从建表到CRUD 自动生成流程

  1. 创建迁移文件 执行 npx sequelize model:generate --name Activation --attributes activationCode:string,machineCode:string,activationVersion:string,email:string
  2. 执行迁移创建数据库表 npm run db 
  3. 通过数据库表再反向映射生成model层  npm run model
  4. 通过我们上面写的模板文件 node gen-controller.js activations 直接生成control层 ,自动完成了具有restful风格的CURD
  5. 后续写一个插件 完成上面的半自动流程 ,实现 定义完成数据库表 ,即而成crud

1-5有不懂的,可以看上一篇文章

http://www.lryc.cn/news/467494.html

相关文章:

  • 自动化抖音点赞取消脚本批量处理
  • 基于YOLOv8深度学习的智能车牌检测与识别系统【python源码+Pyqt5界面+数据集+训练代码】目标检测、深度学习实战
  • qt QGraphicsGridLayout详解
  • 数字处理系列
  • 基于开源Jetlinks物联网平台协议包-MQTT自定义主题数据的编解码
  • 【Python】Python2.7升级Python3
  • Python 内置函数 round() 详解
  • JavaScript入门中-流程控制语句
  • kconfig语法(一)
  • 十七、行为型(命令模式)
  • 原材料供应商的GRS认证证书过期了怎么办?
  • C++编程:实现一个基于原始指针的环形缓冲区(RingBuffer)缓存串口数据
  • LangChain 创始人万字科普:手把手教你设计 Agent 用户交互
  • Docker 用例:15 种最常见的 Docker 使用方法
  • 若依 RuoYi4.6.0 代码审计
  • C语言入门-选择结构
  • Legion拯救者 刃7000K-26IAB联想台式机T5 26IAB7(90SU,90SV,90SW,90SX)原厂Windows11系统镜像下载
  • 代码随想录算法训练营第二十四天|Day24 回溯算法
  • vue elementui table编辑表单时,弹框增加编辑明细数据
  • springboot集成Redisson做分布式消息队列
  • 如何通过Lua语言请求接口拿到数据
  • Android 13 SystemUI 隐藏下拉快捷面板部分模块(wifi,bt,nfc等)入口
  • 自由学习记录(14)
  • 疯狂Spring Boot讲义[推荐1]
  • vue中$nextTick的作用是什么,什么时候使用
  • Redis实现全局ID生成器
  • Xshell远程连接工具详解
  • 如何在verilog设计的磁盘阵列控制器中实现不同RAID级别(如RAID 0、RAID 1等)的切换?
  • 基于元神操作系统实现NTFS文件操作(十)
  • Qt的几个函数方法