日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

mongoose换成mysql_Package - tms-koa

發布時間:2025/3/8 数据库 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mongoose换成mysql_Package - tms-koa 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

tms-koa

基于koa的輕量級快速開發框架,包含 MVC 中的 M 和 C 兩部分,適合于實現 API 服務和前后端徹底分離的應用。

內置基于 access_token 的訪問鑒權機制,更容易實現 API 調用的負載分擔。

內置通過連接池訪問 MySQL 數據庫,支持進行讀寫分離。內置 SQL 語句的封裝,內置 escape 防止 sql 注入。目前 where 條件中,exists,and,or 形成的 sql 不會進行 escape 處理,需要在外部自行處理。select 中的 fields 和 table 未進行 escape 處理,不能夠直接使用用戶輸入的內容作為字段名和表名。orderby 和 groupby 未做 escape 處理,不能夠直接使用用戶輸入。

內置支持上傳文件。

安裝

npm install tms-koa --save

注意:tms_db,mongodb,mongoose,redis 這 4 個依賴包采用peerDependencies,不會進行自動安裝,如果需要使用可以手動安裝。tms-db 的依賴包 mysql 和 better-sqlite3 采用peerDependencies,不會進行自動安裝,如果需要使用可以手動安裝。

測試

安裝pm2(如果沒裝過)

cnpm i pm2 -g

通過pm2啟動

npm run pm2

啟動 Redis 和 MongoDb

docker-compose up -d

發送獲得 token 的請求

http://localhost:3001/auth/authorize

發送調用 api 的請求

http://localhost:3001/api/tryGet?access_token=&value=hello

建立新應用

配置信息

在項目的根目錄下建立文件/config/app.js,指定下列信息:

module.exports = {

port: 3000,

name: 'tms-koa-0',

router: {

auth: {

prefix: '', // 接口調用url的前綴

},

controllers: {

prefix: '', // 接口調用url的前綴,例如:/api

},

},

auth: {

captcha: { code: 'a1z9' },

client: { accounts: [{ id: 1, username: 'user1', password: '123456' }] },

jwt: {

privateKey: 'tms-koa-secret',

expiresIn: 7200,

},

},

tmsTransaction: false,

}

路由(router)

controllers的prefix 在 url 中出現,例如:http://localhost:3001/api/tryGet?value=hello,但是不在 controller 的路徑中出現,例如:controllers/main.js 為與 url 對應的控制器。

認證(auth)

auth部分是可選的,如果不配置或者disabled設置為true,就不啟動鑒權機制。

支持jwt和redis兩種token認證機制,都支持用disabled關閉,若同時設置,jwt優先于redis。

redis

在項目的根目錄下建立文件/config/redis.js,指定下列 Redis 連接信息:

module.exports = {

disabled: false, // 可選項,不需要指定。主要用于開發調試階段。

master: {

host: '127.0.0.1',

port: 6379,

},

}

關系數據庫(mysql 或 sqlite)

在項目的根目錄下建立文件/config/db.js,指定下列 MySQL 或 Sqlite 數據庫(可選)連接信息:

module.exports = {

mysql: {

master: {

connectionLimit: 10,

host: '',

port: '',

user: '',

password: '',

database: '',

},

write: {

connectionLimit: 10,

host: '',

port: '',

user: '',

password: '',

database: '',

},

},

sqlite: {

path: '',

},

}

mongodb

在項目的根目錄下建立文件/config/mongodb.js,指定下列 MongoDb 連接信息:

module.exports = {

disabled: false, // 可選項,不需要指定。主要用于開發調試階段。

master: {

host, // 如果要連接復制集,這里是復制集節點的主機地址數組

port: 27017, // 如果要連接復制集,這里是復制集節點的主機端口數組

replicaSet, // 復制集的名稱

},

}

注意:如果項目要使用 mongodb,需要在項目中安裝 mongodb 包。

mongoose

在項目的根目錄下建立文件/config/mongoose.js,指定下列 mongoose 連接信息:

module.exports = {

disabled: false, // 可選項,不需要指定。主要用于開發調試階段。

host,

port: 27017,

database: 'test',

}

注意:如果項目要使用 mongoose,需要在項目中安裝 mongoose 包。

文件服務

文件管理,例如:保存上傳文件

module.exports = {

local: {

rootDir: 'files' // 指定保存文件的根目錄

database: {

dialect: 'mongodb',

database:'upload',

file_table: 'files'

},

schemas: {

$schema: 'http://json-schema.org/draft-07/schema#',

type: 'object',

title: 'Json-Doc-File',

description: 'tms-vue-finder file',

properties: {

comment: {

type: 'string',

minLength: 0,

maxLength: 80,

title: '說明1',

attrs: {

placeholder: '請輸入說明',

title: '說明1'

}

}

}

}

}

}

tms-koa 支持保存上傳文件的擴展信息。可以指定將信息保存在數據庫中,例如:mongodb。指定的數據庫需要在/config/mongodb.js 中存在。

啟動代碼

建立文件app.js(可根據需要自行命名)

const { TmsKoa } = require('tms-koa')

const tmsKoa = new TmsKoa()

tmsKoa.startup()

可以在 startup 中添加其他中間件(middleware),例如:

控制器之前

tmsKoa.startup({beforeController:[]})

控制器之后

tmsKoa.startup({afterController:[]})

完成初始化,啟動 http 和 https 端口之前

tmsKoa.startup({afterInit:function(context){}})

API 代碼

建立 controllers 目錄防止 API 代碼,參考內置模塊控制器部分。

內置模塊

認證機制

在項目的根目錄下建立文件/auth/client.js,實現一個根據 http 請求 返回Clinet對象的方法。

通過調用/auth/authorize獲得access_token,它的值和client.js返回的對象存在一一對應的關系。

獲得的access_token會存儲在 Redis 中,有效期是7200秒。格式為應用名稱(app.js 中的 name),內容名AccessToken,token字符串,用戶id字符串(來源于 client.js 中指定的 id),中間用:分隔。

tms-koa-0:AccessToken:c89d35281105456babd15d94831424c7:userid

利用這個機制可以用tms-koa實現一個基于 token 的 api 鑒權中心。

通過調用/auth/client用access_token獲得用戶信息。

詳細說明參加:訪問控制

控制器(API)

項目根目錄下創建controllers目錄,路徑和 url 匹配

需要從 Ctrl 類繼承。

const { Ctrl, ResultData } = require('tms-koa')

class Main extends Ctrl {

tmsRequireTransaction() {

return {

get: true,

}

}

get() {

return new ResultData('I am an api.')

}

}

module.exports = Main

路由與控制器匹配規則

tms-koa會根據url自動匹配/controllers目錄下的控制器文件。

路由格式:http://yourhost/{prefix}/{controller}/{method}

參數

說明

prefix

/config/app.js文件中,router/controlers/prefix中指定的內容。

controller

和/controllers目錄下的文件對應。main.js作為目錄中的默認控制,如果url匹配的是目錄,tms-koa會嘗試匹配main.js文件。

method

匹配到的Ctrl對象的方法。

參考:/lib/controller/router.js文件。

模型(model)

項目根目錄下創建models目錄。

模型必須從 DbModel 繼承。

必須在導出包中提供一個用戶創建實例的create方法。DbModel類中已經內置一個創建實例的方法的create方法,它的子類可參照下面的例子進行調用。

const { DbModel } = require('tms-koa')

class Template extends DbModel {

constructor({ db = null, debug = false } = {}) {

super('template', { db, debug })

}

}

module.exports = { Template, create: Template.create.bind(Template) }

已經在 model 層中進行 escape 處理,防止 sql 注入。關于 escape 請參考:tms_db。

靜態文件

項目根目錄下創建public目錄。

控制器守衛方法

在控制器類(Ctrl)中添加方法,說明需要在調用接口前執行的代碼。

async tmsBeforeEach(method) {

// 返回ResultFault及其子類的對象,終止接口調用

// return new ResultFault('發生錯誤')

return true

}

文件上傳和下載

domain bucket path

domain 和 bucket 對用戶是不可見的?但是要直接訪問呢?

需要在部署階段創建程序運行后用到的domain,例如在files目錄下創建tests目錄,用于保存單元測試產生的文件。

在 controllers 目錄創建文件 upload.js(可根據需要命名),用于上傳文件。

const { UploadCtrl } = require('tms-koa/lib/controller/fs')

class Upload extends UploadCtrl {

constructor(...args) {

super(...args)

}

}

module.exports = Upload

在 controllers 目錄創建文件 browse.js(可根據需要命名),用于瀏覽文件。

const { BrowseCtrl } = require('tms-koa/lib/controller/fs')

class Browse extends BrowseCtrl {

constructor(...args) {

super(...args)

}

}

module.exports = Browse

記錄日志

在啟動代碼中添加如下文件

const log4jsConfig = require('./config/log4js')

const log4js = require('log4js')

log4js.configure(log4jsConfig)

Current Tags

0.0.64 ???????????????????? ????????? ... ????????? latest (22 days ago)

60 Versions

0.0.64 ???????????????????? ????????? ... ????????? 22 days ago

0.0.63 ???????????????????? ????????? ... ????????? 23 days ago

0.0.62 ???????????????????? ????????? ... ????????? a month ago

0.0.61 ???????????????????? ????????? ... ????????? 2 months ago

0.0.60 ???????????????????? ????????? ... ????????? 2 months ago

0.0.59 ???????????????????? ????????? ... ????????? 2 months ago

0.0.58 ???????????????????? ????????? ... ????????? 2 months ago

0.0.57 ???????????????????? ????????? ... ????????? 2 months ago

0.0.56 ???????????????????? ????????? ... ????????? 2 months ago

0.0.55 ???????????????????? ????????? ... ????????? 2 months ago

0.0.54 ???????????????????? ????????? ... ????????? 2 months ago

0.0.53 ???????????????????? ????????? ... ????????? 3 months ago

0.0.52 ???????????????????? ????????? ... ????????? 3 months ago

0.0.50 ???????????????????? ????????? ... ????????? 4 months ago

0.0.49 ???????????????????? ????????? ... ????????? 7 months ago

0.0.48 ???????????????????? ????????? ... ????????? 7 months ago

0.0.47 ???????????????????? ????????? ... ????????? 7 months ago

0.0.46 ???????????????????? ????????? ... ????????? 8 months ago

0.0.45 ???????????????????? ????????? ... ????????? 8 months ago

0.0.44 ???????????????????? ????????? ... ????????? 8 months ago

0.0.43 ???????????????????? ????????? ... ????????? 8 months ago

0.0.42 ???????????????????? ????????? ... ????????? 8 months ago

0.0.41 ???????????????????? ????????? ... ????????? 8 months ago

0.0.40 ???????????????????? ????????? ... ????????? 9 months ago

0.0.39 ???????????????????? ????????? ... ????????? 9 months ago

0.0.38 ???????????????????? ????????? ... ????????? 9 months ago

0.0.37 ???????????????????? ????????? ... ????????? 9 months ago

0.0.36 ???????????????????? ????????? ... ????????? 9 months ago

0.0.35 ???????????????????? ????????? ... ????????? 9 months ago

0.0.34 ???????????????????? ????????? ... ????????? 10 months ago

0.0.33 ???????????????????? ????????? ... ????????? 10 months ago

0.0.32 ???????????????????? ????????? ... ????????? 10 months ago

0.0.31 ???????????????????? ????????? ... ????????? a year ago

0.0.30 ???????????????????? ????????? ... ????????? a year ago

0.0.29 ???????????????????? ????????? ... ????????? a year ago

0.0.28 ???????????????????? ????????? ... ????????? a year ago

0.0.27 ???????????????????? ????????? ... ????????? a year ago

0.0.26 ???????????????????? ????????? ... ????????? a year ago

0.0.25 ???????????????????? ????????? ... ????????? a year ago

0.0.22 ???????????????????? ????????? ... ????????? a year ago

0.0.21 ???????????????????? ????????? ... ????????? a year ago

0.0.20 ???????????????????? ????????? ... ????????? a year ago

0.0.19 ???????????????????? ????????? ... ????????? a year ago

0.0.18 ???????????????????? ????????? ... ????????? a year ago

0.0.17 ???????????????????? ????????? ... ????????? a year ago

0.0.16 ???????????????????? ????????? ... ????????? a year ago

0.0.15 ???????????????????? ????????? ... ????????? a year ago

0.0.13 ???????????????????? ????????? ... ????????? a year ago

0.0.12 ???????????????????? ????????? ... ????????? a year ago

0.0.11 ???????????????????? ????????? ... ????????? a year ago

0.0.10 ???????????????????? ????????? ... ????????? a year ago

0.0.9 ???????????????????? ????????? ... ????????? a year ago

0.0.8 ???????????????????? ????????? ... ????????? a year ago

0.0.7 ???????????????????? ????????? ... ????????? a year ago

0.0.6 ???????????????????? ????????? ... ????????? a year ago

0.0.5 ???????????????????? ????????? ... ????????? a year ago

0.0.4 ???????????????????? ????????? ... ????????? a year ago

0.0.3 ???????????????????? ????????? ... ????????? a year ago

0.0.2 ???????????????????? ????????? ... ????????? a year ago

0.0.1 ???????????????????? ????????? ... ????????? a year ago

總結

以上是生活随笔為你收集整理的mongoose换成mysql_Package - tms-koa的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。