cool-admin-api 正在参加 2021 年度 OSC 中国开源项目评选,请投票支持!
cool-admin-api 在 2021 年度 OSC 中国开源项目评选 中已获得 {{ projectVoteCount }} 票,请投票支持!
2021 年度 OSC 中国开源项目评选 正在火热进行中,快来投票支持你喜欢的开源项目!
2021 年度 OSC 中国开源项目评选 >>> 中场回顾
cool-admin-api 获得 2021 年度 OSC 中国开源项目评选「最佳人气项目」 !
授权协议 MIT License
开发语言 JavaScript
操作系统 跨平台
软件类型 开源软件
开源组织
地区 不详
投 递 者 首席测试
适用人群 未知
收录时间 2021-11-23

软件简介

展示

技术选型

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 分页查询(包含模糊查询、字段全匹配等)

PageOption配置参数

参数 类型 说明
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号' ];
    }
}

Cache配置参数

参数 类型 说明
resolver 数组 方法参数获得,生成key用, resolver: (args => {return args[0];}), 这样就可以获得方法的第一个参数作为缓存key
ttl 数字 缓存过期时间,单位:
url 字符串 请求url包含该前缀才缓存,如/api/*请求时缓存,/admin/*请求时不缓存

路由

egg.js原生的路由写法过于繁琐,cool-admin的路由支持BaseController还有其他原生支持具体参照egg.js路由

自定义sql查询

除了单表的简单操作,真实的业务往往需要对数据库做一些复杂的操作。这时候我们可以在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);
}

this.setSql()设置参数

参数 类型 说明
condition 布尔型 只有满足改条件才会拼接上相应的sql和参数
sql 字符串 需要拼接的参数
params 数组 相对应的参数
展开阅读全文

代码

评论 (0)

加载中
更多评论
暂无内容
发表了博客
2019/08/08 10:05

Rest Api Step 2. Get the admin token

Each step in this tutorial provides the following information: Endpoint This section lists the HTTP verb and full path to the endpoint. The basic structure of a REST call in Magento is <HTTP verb> http://<host>/rest/<scope>/<endpoint> where: Element Description HTTP verb One of GET, POST, PUT, or DELETE host The hostname or IP address (and optionally, port) of the Magento installation. scope Sp...

0
0
发表了博客
2011/07/25 12:46

Life Is Cool

I never really tried to be positive 我从来没有努力去拥有积极的态度 I’m too damn busy being negative 也没有空自己消极沉沦 So focused on what I get 如此看重得失 I never understand what it means to live 却从未明白过生活的实质 You know we all love to just complain 我们都喜欢抱怨 But maybe we should try to rearrange 但是也许我们应该重新整理心思 There’s always someone who’s got it worse than you 世...

0
2
发表于大前端专区
2018/04/21 22:12

cool 简单例子

原文链接: cool 简单例子 上一篇: Ubuntu vscode 安装和卸载 下一篇: vmware 安装 vmware tools 实现 共享剪贴板 几个单间例子 手册 http://theory.stanford.edu/~aiken/software/cool/cool-manual.pdf 局部变量使用let in 语法 ,注意作用域 生命格式 为 标签: 类型,注意空格和类型的首字母大写 控制和循环语句的结束都有标记 函数返回类型如果是object,注意有两个花括号 相等判断使用单等号 关于表达式和结束符号 返回Int...

0
0
发表了博客
2019/05/10 23:05

[Codeforces700E Cool Slogans]

##简要题意 给出一个长度为n的字符串s[1],由小写字母组成。定义一个字符串序列s[1....k],满足性质:s[i]在s[i-1] (i>=2)中出现至少两次(位置可重叠),问最大的k是多少,使得从s[1]开始到s[k]都满足这样一个性质。 $n\le 200000$ ##Sol 一道适合练习SAM的right集合神题 + 神仙结论题 结论(1) 每次只算$s[i-1]$是$s[i]$的后缀的情况,显然是不会影响答案的。 因为如果$s[i-1]$不是$s[i]$的后缀,那么我们把不与$s[i-1]$匹配的...

0
0
发表了博客
2018/03/11 20:16

CodeForces700E Cool Slogans

感谢dalaoWJZ的讲解。 我们对于每一个串a[i]相当于在他parent的right集合里找一个出现位置在id-len[x]+len[parent]到id[x]-1区间的 用主席树判存在性即可。 至于我问了很久这个区间为什么不能往前判,原因是你每个节点都代表唯一一个子串,所以我们定性查询就可以啦。 By:大奕哥 1 #include<bits/stdc++.h> 2 using namespace std; 3 const int N=4e5+10; 4 int rt[N],num,n; 5 char s[N]; 6 struct tree{ 7 ...

0
0
发表了博客
2018/06/12 15:37

CF700E Cool Slogans

题意 给出一个长度为 $n$ 的字符串 $s[1]$,由小写字母组成。定义一个字符串序列 $s[1....k]$ ,满足性质:$s[i]$ 在 $s[i-1]$ $(i \ge 2)$ 中出现至少两次(位置可重叠),问最大的 $k$ 是多少,使得从 $s[1]$ 开始到 $s[k]$ 都满足这样一个性质。 Sol 某模拟赛出了这样一道题 然后因为测试没开无限栈,没有AC 建立后缀自动机,那么每个点就是字符串中的一个子串 设 $f[i]$ 表示以 $i$ 这个子串结尾的最大的答案 显然在 $paren...

0
0
没有更多内容
加载失败,请刷新页面
点击加载更多
加载中
下一页
暂无内容
0 评论
0 收藏
分享
OSCHINA
登录后可查看更多优质内容
返回顶部
顶部