koajs專案實踐 三 專案中介軟體介紹 orm

2021-10-09 15:12:57 字數 3210 閱讀 9518

這篇文章重點介紹專案封裝的核心中介軟體,有了這些中介軟體,可以更好地快速開發專案

中介軟體是對koa-orm進行再一次的封裝,使其能夠使用單例模式

lib目錄下是koa-orm需要使用到的一些庫檔案,入口檔案為index.js

sequelize 模組的使用可以到官網檢視,這裡就不具體展開說明

index.js檔案介紹

將orm相關物件的初始化放在檔案頭,在js初次載入的時候一同初始化,使其只初始化一次,形成單例模式

//指定資料庫配置檔案位置

let dbconfig =

require

('../../../config/db.json'

)let _path = path.

resolve

('./'

)//設定schema檔案目錄

dbconfig.modelpath = path.

join

(_path,

)//傳入資料庫配置,初始化orm物件

const orm =

require

('koa-orm'

)(dbconfig)

;//獲取db資料庫物件

const database = orm.

database()

;

構建資料庫連線類,建構函式傳入檔案頭初始化的db資料庫物件,並向外暴露獲取db物件方法connect

class

dbconnect

getdatabase()

}let connect =

newdbconnect

(database)

;module.exports =

orm中介軟體的使用

在models目錄下有乙個basemodel檔案,它是所有dao層檔案都需要繼承的乙個base類,整合後就可以使用資料庫db物件了,並且base類也抽離了一些公共的方法

在檔案頭引入orm中間的資料庫db物件

//引入orm中間的資料庫db物件

const

orm=

require

('../middleware/orm'

).connect;

通過建構函式的方式,設定當前的orm物件

constructor

(opts)

;this

.orm =

orm;

this

.model =

this

.opts.model;

this

.attrs =

this

.opts.attrs;

this

.list_attrs =

this

.opts.list_attrs

this

.logger = mylog4js;

}

通過sequelize的一些api就可以實現增刪改查的方法

/**

* 根據表的pk欄位獲取該記錄

** @param id

* @returns

*/async

get(id)

其中"this.orm[this.model]"為獲取子類的具體model類,以demo專案的」jqmusermodel「為例

const basemodel =

require

('./basemodel'

)const opts =

opts.model =

'jqmuser'

//表全字段

opts.attrs =

['id'

,'user_name'

,'user_pw'

,'cover'

,'nick_name'

,'***'

,'ip'

,'country'

,'type'

,'level'

,'state'

,'create_time'

,'update_time'

]//查詢多條記錄時,返回的字段

opts.list_attrs =

['id'

,'cover'

,'nick_name'

,'***'

,'type'

,'level'

]class

jqmusermodel

extends

basemodel

}let model =

newjqmusermodel

(opts)

;module.exports = model

jqmusermodel繼承了basemodel,其中檔案頭"opts.model = 『jqmuser』"就是設定此方法使用的模型(對應著schema定義的名稱jqmuser)

const sequelize =

require

('sequelize');

module.

exports

=function

(sequelize, datatypes)

{let jqmuser = sequelize.

define

("jqmuser",{

user_name: sequelize.

string

,

user_pw: sequelize.

string

,

cover: sequelize.

string

,

以後有新的資料表,dao層只需要繼承basemodel就可以獲取到對應的資料庫物件了

我這邊自己寫了乙個model和schema的自動生成器專案,大家有需要可以訪問我的 github專案

具體可以看專案的幫助文件,也很簡單,只要輸入乙個資料表名就可以使用了

basemodel的建立方法create缺省會自動加入』create_time『、『update_time』和』state』,三個字段,所以對應的資料表內要包括這三個字段。如果不需要,可進行刪除

訊息中介軟體在專案中的作用

乙個使用者登入了系統,將傳送通知給積分系統集群和日誌系統集群,要求積分系統集群和日誌系統集群都能接收到完整的登入實現通知,類似於主題模式,同時在其中任乙個系統群中不能讓乙個訊息被集群中的多個系統重複處理,這類似於佇列模式。子業務系統都有集群的可能性 同乙個訊息會廣播給關注該類訊息的所有子業務系統 同...

三 專案管理

專案管理就是將知識 技能 工具與技術應用於專案活動,以滿足專案的要求。專案管理通過合理運用與整合特定專案所需的專案管理49個過程得以實現。專案管理使組織能夠有效且高效地開展專案。簡單理解,在規劃乙個專案時,在意的是做正確的事 在執行專案過程中,在意的則是把事做正確。所以專案管理就是 把事做正確。專案...

三 專案結構

三 專案結構 package.json 這個檔案包含了 node 包依賴列表和一些其他的專案配置。public 這個資料夾包含了所有你的專案構建出的產品檔案。最終所有你寫在 src 文 件夾裡面的 都會在專案構建的時候被打包放在 public 資料夾下。src 這個資料夾包含了所有的react js...