Node 버전의 백엔드 기본 프레임워크는 Egg.js(Alibaba에서 제작)를 기반으로 합니다.
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' ] 과 같은 일치하는 필드가 필요하므로姓名、手机 두 필드를 퍼지 쿼리할 수 있습니다. |
어디 | TypeORM Brackets 객체 | 조건 설정이 수정되었습니다. 자세한 내용은 형식을 참조하세요. |
fieldEq | 정렬 | 동적 조건이 완전히 일치합니다. 사용자 status 필터링해야 하는 경우 이를 ['status'] 로 설정할 수 있습니다. 이때 인터페이스는 status 값을 수락하고 데이터에 필터링 효과를 적용할 수 있습니다. |
추가주문기준 | 물체 | { 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: (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 ) ;
}
매개변수 | 유형 | 설명하다 |
---|---|---|
상태 | 부울 | 변경된 조건이 충족된 경우에만 해당 SQL과 매개변수가 연결됩니다. |
SQL | 끈 | 연결해야 하는 매개변수 |
매개변수 | 정렬 | 해당 매개변수 |