Node版后台基础框架基于Egg.js(阿里出品)
独有cool-admin.com发布的npm组件
环境 Node.js>=8.9.0
Redis
mysql
新建并导入数据库,修改数据库连接信息
推荐使用yarn
git clone https://github.com/apgzs/cool-admin-api.git
cd cool-admin-api
yarn
yarn dev
http://localhost:7001
或者npm
git clone https://github.com/apgzs/cool-admin-api.git
cd cool-admin-api
npm install
npm run dev
http://localhost:7001
##视频教程:
cool-admin后端简单入门视频(快速写6个api接口):https://www.bilibili.com/video/BV1SE411j74K
cool-admin前后端配合使用:https://www.bilibili.com/video/av90478011/
cool-admin前端crud内部培训教程:https://www.bilibili.com/video/av89512654/
数据模型必须放在app/entities/*
下,否则typeorm无法识别,如:
import { Entity, Column, Index } from 'typeorm';
import { BaseEntity } from 'egg-cool-entity';
/**
* 系统角色
*/
@Entity({ name: 'sys_role' })
export default class SysRole extends BaseEntity {
// 名称
@Index({ unique: true })
@Column()
name: string;
// 角色标签
@Index({ unique: true })
@Column({ nullable: true })
label: string;
// 备注
@Column({ nullable: true })
remark: string;
}
新建完成运行代码,就可以看到数据库新建了一张sys_role
表,如不需要自动创建config
文件夹下修改typeorm的配置文件
有了数据表之后,如果希望通过接口对数据表进行操作,我们就必须在controller
文件夹下新建对应的控制器,如:
import { BaseController } from 'egg-cool-controller';
import { Context } from 'egg';
import routerDecorator from 'egg-cool-router';
import { Brackets } from 'typeorm';
/**
* 系统-角色
*/
@routerDecorator.prefix('/admin/sys/role', [ 'add', 'delete', 'update', 'info', 'list', 'page' ])
export default class SysRoleController extends BaseController {
constructor (ctx: Context) {
super(ctx);
this.setEntity(this.ctx.repo.sys.Role);
this.setPageOption({
keyWordLikeFields: [ 'name', 'label' ],
where: new Brackets(qb => {
qb.where('id !=:id', { id: 1 });
}),
});//分页配置(可选)
this.setService(this.service.sys.role);//设置自定义的service(可选)
}
}
这样我们就完成了6个接口的编写,对应的接口如下:
/admin/sys/role/add
新增/admin/sys/role/delete
删除/admin/sys/role/update
更新/admin/sys/role/info
单个信息/admin/sys/role/list
列表信息/admin/sys/role/page
分页查询(包含模糊查询、字段全匹配等)参数 | 类型 | 说明 |
---|---|---|
keyWordLikeFields | 数组 | 模糊查询需要匹配的字段,如[ 'name','phone' ] ,这样就可以模糊查询姓名、手机 两个字段了 |
where | TypeORM Brackets对象 | 固定where条件设置,详见typeorm |
fieldEq | 数组 | 动态条件全匹配,如需要筛选用户状态status ,就可以设置成['status'] ,此时接口就可以接受status 的值并且对数据有过滤效果 |
addOrderBy | 对象 | 排序条件可传多个,如{ sortNum:asc, createTime:desc } |
有些业务场景,我们并不希望每次请求接口都需要操作数据库,如:今日推荐、上个月排行榜等,数据存储在redis
,注:缓存注解只在service
层有效
import { BaseService } from 'egg-cool-service';
import { Cache } from 'egg-cool-cache';
/**
* 业务-排行榜服务类
*/
export default class BusRankService extends BaseService {
/**
* 上个月榜单
*/
@Cache({ ttl: 1000 }) // 表示缓存
async rankList () {
return [ '程序猿1号', '程序猿2号', '程序猿3号' ];
}
}
参数 | 类型 | 说明 |
---|---|---|
resolver | 数组 | 方法参数获得,生成key用, resolver: (args => {return args[0];}), 这样就可以获得方法的第一个参数作为缓存key |
ttl | 数字 | 缓存过期时间,单位:秒 |
url | 字符串 | 请求url包含该前缀才缓存,如/api/* 请求时缓存,/admin/* 请求时不缓存 |
egg.js原生的路由写法过于繁琐,cool-admin
的路由支持BaseController
还有其他原生支持具体参照egg.js路由
除了单表的简单操作,真实的业务往往需要对数据库做一些复杂的操作。这时候我们可以在service
自定义SQL,如
async page (query) {
const { keyWord, status } = query;
const sql = `
SELECT
a.*,
GROUP_CONCAT(c.name) AS roleName
FROM
sys_user a
LEFT JOIN sys_user_role b ON a.id = b.userId
LEFT JOIN sys_role c ON b.roleId = c.id
WHERE 1 = 1
${ this.setSql(status, 'and a.status = ?', [ status ]) }
${ this.setSql(keyWord, 'and (a.name LIKE ? or a.username LIKE ?)', [ `%${ keyWord }%`, `%${ keyWord }%` ]) }
${ this.setSql(true, 'and a.id != ?', [ 1 ]) }
GROUP BY a.id`;
return this.sqlRenderPage(sql, query);
}
参数 | 类型 | 说明 |
---|---|---|
condition | 布尔型 | 只有满足改条件才会拼接上相应的sql和参数 |
sql | 字符串 | 需要拼接的参数 |
params | 数组 | 相对应的参数 |
管理REST API 认证 AWS signatureV4 我们使用minio作为区域。 这里区域仅用于签名计算。 管理接口 Service Restart Status SetCredentials Locks List Clear Healing 服务管理接口 Restart POST /?service x-minio-operation: restart Response: On succ
1.Admin API API 作用 AdminClient AdminClient客户端对象 NewTopic 创建topic CreateTopicsResult 创建topic的返回结果 ListTopicsResult 查询topic列表 ListTopicsOptions 查询topic列表及选项 DescribeTopicsResult 查询topic DescribeConfigsR
1.代码示例 public class AdminSample { private static final String topicName = "steven"; private static final int partitionNumber = 1; private static final Short replicationFactor = 1; /
1.google chart 绘制图表很好用。 Pie Chart 37.5%29.2%12.5%16.7% Scatter Chart Gauge Memory010080 CPU010055 Geo Chart Table Name Salary Full Time 1 Marie $24,700 ✔ 2 Albert $25,200 ✗ 3 Enrico $25,700 ✔ 4 Li
1.代码示例 public class AdminSample { private static final String topicName = "steven"; private static final int partitionNumber = 1; private static final Short replicationFactor = 1; /
cool-admin(midway版)一个很酷的后台权限管理系统,开源免费,模块化、插件化、极速开发CRUD,方便快速构建迭代后台管理系统,支持serverless、docker、普通服务器等多种方式部署到 论坛 进一步了解 技术栈 后端:node.js midway.js egg.js mysql typescript 前端:vue.js element-ui jsx vuex vue-rout
Django Cool 是一个 Django 框架快速使用扩展库。目前 Django Cool 支持的 Python 环境有 3.6、3.7、3.8,支持 Django 版本 2.2、3.0、3.1。 models 扩展 自定义 Model 继承 BaseModel 可使用扩展功能: 支持字段变更监控记录 通过 save_changed() 保存已修改字段 主键唯一键缓存 缓存获取: get_ob
Cool-Node 是一个基于 Node.js 平台的轻量级 Web 应用程序框架。它拥有诸如自动路由映射、跨协议开发、多应用模式等及其出色的功能。 Cool-Node 体积精巧,它只定义了编写项目的一些规则,并对一些成熟的 Web 框架进行包装,使其更适合快速开发。 Cool-Node 是简单易用的,它不二次定义 Node.js 及依赖项所有的功能,而只是将其包装并提供更合适的接口和自动化特性去
cool-php-captcha 是一个很酷的 PHP 用来生成验证码的库。 示例代码: session_start(); $captcha = new SimpleCaptcha(); // Change configuration... //$captcha->wordsFile = null; // Disable dictionary words //$captcha-
Jfinal-Cool-Blog,这是一个基于jfinal开发的炫酷博客系统。 本博客采用了jfinal 作为后台框架 ,前端使用 bootstrap为主要结构,引用以下js和css <link href="/DJSBlog/static/css/bootstrap.min.css" rel="stylesheet"><link href="/DJSBlog/static/css/animate.
cool-retro-term > Default Amber C:\ IBM DOS $ Default Green Description cool-retro-term is a terminal emulator which mimics the look and feel of the old cathode tube screens.It has been designed to be