เฟรมเวิร์กพื้นฐานแบ็กเอนด์ของเวอร์ชันโหนดนั้นใช้ Egg.js (ผลิตโดยอาลีบาบา)
คอมโพเนนต์ npm ที่ไม่ซ้ำใครเผยแพร่โดย cool-admin.com
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
##วิดีโอสอน:
วิดีโอแนะนำง่ายๆ บนแบ็กเอนด์ผู้ดูแลระบบเย็น (เขียนอินเทอร์เฟซ API 6 รายการอย่างรวดเร็ว): https://www.bilibili.com/video/BV1SE411j74K
Cool-admin ใช้ร่วมกับส่วนหน้าและส่วนหลัง: https://www.bilibili.com/video/av90478011/
บทช่วยสอนการฝึกอบรมภายใน cool-admin front-end 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
paging query (รวมถึงการสืบค้นแบบคลุมเครือ การจับคู่ฟิลด์แบบเต็ม ฯลฯ) พารามิเตอร์ | พิมพ์ | แสดงให้เห็น |
---|---|---|
keyWordLikeFields | อาร์เรย์ | การสืบค้นแบบคลุมเครือจำเป็นต้องมีฟิลด์ที่ตรงกัน เช่น [ 'name','phone' ] เพื่อให้คุณสามารถสืบค้นแบบคลุมเครือในสองฟิลด์姓名、手机 |
ที่ไหน | วัตถุวงเล็บ TypeORM | แก้ไขการตั้งค่าเงื่อนไข ดูรายละเอียดใน typeorm |
สนามEq | อาร์เรย์ | เงื่อนไขไดนามิกตรงกันอย่างสมบูรณ์ หากคุณต้องการกรอง 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: (args => {return args[0];}), เพื่อให้สามารถรับพารามิเตอร์แรกของวิธีการเป็น key |
ทีทีแอล | ตัวเลข | เวลาหมดอายุของแคช หน่วย:秒 |
URL | เชือก | URL คำขอจะถูกแคชเฉพาะเมื่อมีคำนำหน้านี้เท่านั้น ตัวอย่างเช่น /api/* จะถูกแคชเมื่อมีการร้องขอ และ /admin/* จะไม่ถูกแคชเมื่อมีการร้องขอ |
วิธีการเขียนเส้นทางดั้งเดิมของ Egg.js นั้นยุ่งยากเกินไป การกำหนดเส้นทางของ cool-admin
รองรับ BaseController
และการสนับสนุนดั้งเดิมอื่นๆ สำหรับรายละเอียด โปรดดูที่การกำหนดเส้นทาง egg.js
นอกเหนือจากการดำเนินการง่ายๆ บนตารางเดียวแล้ว ธุรกิจจริงยังต้องการการดำเนินการที่ซับซ้อนบนฐานข้อมูลอีกด้วย ในขณะนี้เราสามารถปรับแต่ง SQL ใน service
ได้ เช่น
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 | เชือก | พารามิเตอร์ที่ต้องเชื่อมต่อ |
พารามิเตอร์ | อาร์เรย์ | พารามิเตอร์ที่สอดคล้องกัน |