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

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

// activations

  router.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.kler.cn/news/360621.html

相关文章:

  • 数据门户:企业数字化转型的关键作用
  • Oracle里面,with ... as 用法介绍
  • 软考系统分析师知识点十三:软件需求工程
  • 【论文笔记】Adversarial Diffusion Distillation
  • Flux.using 使用说明书
  • LeetCode第101题. 对称二叉树
  • c语言操作符xiangjie
  • 10 django管理系统 - 管理员管理 - 新建管理员(通过模态框和ajax实现)
  • 快乐数--双指针
  • MSE Loss、BCE Loss
  • 电商大数据获取渠道分享--官方接口、爬虫、第三方如何选择?
  • 【FAQ】HarmonyOS SDK 闭源开放能力 —Map Kit(3)
  • Taro构建的H5页面路由切换返回上一页存在白屏页面过渡
  • Vue day05
  • K8s-pod控制器ReplicaSet(RS)、Deployment(Deploy)
  • 7.three.js通用几何体加载与gltf模型、obj模型加载
  • 下载安装Qt6时建议勾选的组件
  • Golang使用viper读取配置到结构体,但是获取的数据为空
  • 开源 AI 智能名片链动 2+1 模式 S2B2C 商城小程序助力个人品牌发展
  • cefsharp 88.2.90.0(Chromium 88.0.4324.182)支持H264视频播放-PDF预览 老版本回顾系列体验-100以下版本