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 フロントエンドのクラッド内部トレーニング チュートリアル: 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 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ページング クエリ (ファジー クエリ、完全なフィールド マッチングなどを含む) | パラメータ | タイプ | 説明する |
|---|---|---|
| キーワードのようなフィールド | 配列 | ファジー クエリでは、 [ 'name','phone' ]などの一致するフィールドが必要です。そのため、姓名、手机2 つのフィールドをファジー クエリで実行できます。 |
| どこ | TypeORM Brackets オブジェクト | where 条件設定を修正しました。詳細については typeorm を参照してください |
| フィールドEq | 配列 | 動的条件は完全に一致します。 user 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 |
| 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 | 弦 | スプライスする必要があるパラメータ |
| パラメータ | 配列 | 対応するパラメータ |