Kerangka dasar backend versi Node didasarkan pada Egg.js (diproduksi oleh Alibaba)
Komponen npm unik diterbitkan oleh cool-admin.com
Node.js>=8.9.0
Redis
mysql
Buat database baru dan impor, ubah informasi koneksi database
Disarankan untuk menggunakan yarn
git clone https: //github.com/apgzs/cool-admin-api.git
cd cool - admin - api
yarn
yarn dev
http : //localhost:7001
atau npm
git clone https: //github.com/apgzs/cool-admin-api.git
cd cool - admin - api
npm install
npm run dev
http : //localhost:7001
##Videotutorial:
Video pengantar sederhana di backend cool-admin (cepat tulis 6 antarmuka API): https://www.bilibili.com/video/BV1SE411j74K
Cool-admin digunakan bersamaan dengan bagian depan dan belakang: https://www.bilibili.com/video/av90478011/
tutorial pelatihan internal mentah front-end keren-admin: https://www.bilibili.com/video/av89512654/
Model data harus ditempatkan di bawah app/entities/*
, jika tidak, typeorm tidak dapat mengenalinya, seperti:
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 ;
}
Setelah pembuatan baru selesai dan kode dijalankan, Anda dapat melihat bahwa tabel sys_role
baru telah dibuat di database. Jika Anda tidak perlu membuat folder config
secara otomatis, ubah file konfigurasi typeorm.
Setelah memiliki tabel data, jika kita ingin mengoperasikan tabel data melalui antarmuka, kita harus membuat pengontrol baru yang sesuai di bawah folder controller
, seperti:
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(可选)
}
}
Dengan cara ini, kami telah menyelesaikan penulisan 6 antarmuka. Antarmuka yang sesuai adalah sebagai berikut:
/admin/sys/role/add
yang baru/admin/sys/role/delete
/admin/sys/role/update
/admin/sys/role/info
informasi tunggal/admin/sys/role/list
/admin/sys/role/page
(termasuk kueri fuzzy, pencocokan bidang penuh, dll.) parameter | jenis | menjelaskan |
---|---|---|
kunciWordLikeFields | susunan | Kueri fuzzy memerlukan bidang yang cocok, seperti [ 'name','phone' ] , sehingga Anda dapat melakukan kueri fuzzy pada dua bidang姓名、手机 . |
Di mana | Objek Kurung TypeORM | Memperbaiki pengaturan kondisi mana, lihat typeorm untuk detailnya |
bidangPersamaan | susunan | Kondisi dinamis sepenuhnya cocok. Jika Anda perlu memfilter status pengguna, Anda dapat mengaturnya ke ['status'] . Saat ini, antarmuka dapat menerima nilai status dan memiliki efek pemfilteran pada data. |
tambahkanPesananOleh | obyek | Beberapa kondisi pengurutan dapat dilewati, seperti { sortNum:asc, createTime:desc } |
Dalam beberapa skenario bisnis, kami tidak ingin mengoperasikan database setiap kali kami meminta antarmuka, seperti rekomendasi hari ini, peringkat bulan lalu, dll. Data disimpan di redis
Catatan: Anotasi cache hanya valid di lapisan 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号' ] ;
}
}
parameter | jenis | menjelaskan |
---|---|---|
penyelesai | susunan | Parameter metode diperoleh dan kunci dihasilkan menggunakan resolver: (args => {return args[0];}), sehingga parameter pertama metode dapat diperoleh sebagai key |
ttl | nomor | Waktu kedaluwarsa cache, satuan:秒 |
url | rangkaian | URL permintaan hanya akan di-cache jika berisi awalan ini. Misalnya, /api/* akan di-cache saat diminta, dan /admin/* tidak akan di-cache saat diminta. |
Metode penulisan rute asli Egg.js terlalu rumit. Perutean cool-admin
mendukung BaseController
dan dukungan asli lainnya.
Selain operasi sederhana pada satu tabel, bisnis nyata sering kali memerlukan beberapa operasi kompleks pada database. Saat ini kita dapat menyesuaikan SQL dalam service
, seperti
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 ) ;
}
parameter | jenis | menjelaskan |
---|---|---|
kondisi | Boolean | Hanya ketika kondisi yang diubah terpenuhi, sql dan parameter yang sesuai akan disambung. |
sql | rangkaian | Parameter yang perlu disambung |
param | susunan | Parameter yang sesuai |