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

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/530575.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/530575.shtml
英文地址,請注明出處:http://en.pswp.cn/news/530575.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

導出遠程mysql數據庫中的表_shell腳本實現導出遠程mysql數據庫表數據至本地

bin/main.sh腳本內容 #!/bin/bash#作用:用于同步遠程mysql數據庫表數據至本地#作者:丁藝博source /etc/profilesource ~/.bash_profileexport LANGen_US.UTF-8export RUN_HOME$(cd "$(dirname "$0")"; echo "${PWD%/*}")s…

商業智能解決方案_格至智能開關:簡單便捷的商業智能照明解決方案

美萊恩智能照明推出的格至智能調光開關,是一款便捷、可輕松實現擴展的智能照明系統。它能夠節約能源,并在為各種空間工作或者學習的人們,營造最舒適的照明環境。借助美萊恩SLT單火線傳輸技術,在新建或者改造項目中,你將…

vue 安裝 less_解決舊Vue項目升級less-loader 6.0.0報錯

作為一個愛折騰的主,我的package隨時都是ncu -u! 何為ncu,就是檢查nodejs npm/yarn項目依賴最新版本package.json一個插件! 這不,前幾天less-loader 升級了最新版,我也迫不及待升級。 升級最新版軟件依賴有很多好處,總之作為一個開發者你發布新版本肯定是升級改造的工作…

php讀取mysql數據無法修改時間_php設置mysql查詢讀取數據的超時時間

php可以設置mysql查詢的超時時間估計大家不知道吧,一般都直接在mysql中進行設置了,下面我們來為各位介紹一下php設置mysql查詢讀取數據的超時時間吧。現象:php能通過代理正常連接到mysql。但是,執行query后,一直等待&a…

mysql無序id怎么優化limit_MYSQL分頁limit速度太慢優化方法

原標題:MYSQL分頁limit速度太慢優化方法在mysql中limit可以實現快速分頁,但是如果數據到了幾百萬時我們的limit必須優化才能有效的合理的實現分頁了,否則可能卡死你的服務器哦。當一個表數據有幾百萬的數據的時候成了問題!如 * fr…

反積分飽和 程序_用抗積分飽和PID控制傳遞函數為G(s)的被控對象

題目:用抗積分飽和PID控制傳遞函數為G(s)的被控對象G(s)523500/(s^387.35s^210470s)二、抗積分飽和原理積分飽和現象是在系統存在一個方向的偏差,PID控制器的輸出由于積分作用的不斷加大而加大,從而導致執行器達到極限位置,如果控…

mysql top 1效率_TOP 1比不加TOP慢的疑惑

問題描述: 有一個查詢如下,去掉 TOP 1 的時候,很快就出來結果了,但加上 TOP 1 的時候,一般要 2~3 秒才出數據,何解? SELECT TOP 1 ??? A . INVNO FROM A , B WHERE A . Item B . ItemNumber…

jieba庫詞頻統計_用jieba庫統計文本詞頻及云詞圖的生成

一、安裝jieba庫:\>pip install jieba #或者 pip3 install jieba二、jieba庫解析jieba庫主要提供提供分詞功能,可以輔助自定義分詞詞典。jieba庫中包含的主要函數如下:jieba.cut(s) …

mysql查看表描述_MySQL表記錄操作介紹(重點介紹查詢操作)

MySQL表記錄操作指的是對數據庫表中數據進行CRUD增刪改查操作,一下將一一給大家介紹,重點介紹查詢操作。一、插入數據(INSERT)二、刪除數據(DELETE)三、修改數據(UPDATE)四、查詢數據(SELECT)下面將以例子對數據查詢進行詳細講解:例子&#x…

python郵件的圖片放在哪里_用python保存電子郵件中的嵌入圖像

我試圖在一個嵌入的電子郵件中抓取圖像。問題是我保存的圖像不可讀&#xff0c;我不知道為什么。電子郵件(保存為我在代碼開頭加載的文件)&#xff1a;MIME-Version: 1.0Received: by 10.100.120.7 with HTTP; Tue, 18 Oct 2011 10:36:48 -0700 (PDT)In-Reply-To: <8B4FDE07…

sqoop從mysql導入hdfs_sqoop 從mysql導入數據到hdfs、hive

1.上傳sqoop安裝包 2.安裝和配置 在添加sqoop到環境變量 將數據庫連接驅動拷貝到$SQOOP_HOME/lib里 3.使用 第一類&#xff1a;數據庫中的數據導入到HDFS上 sqoop import --connect jdbc:mysql://hadoop07:3306/test --username root --password 123 --table user_info--colum…

安卓mysql插入數據_【11-25求助】關于Android 的SQLite數據庫插入數據報錯問題

該樓層疑似違規已被系統折疊 隱藏此樓查看此樓運行程序&#xff0c;不知道為何點插入數據按鈕會報錯&#xff0c;請萬能的吧友幫我看看&#xff0c;謝謝&#xff0c;不廢話&#xff0c;直接上代碼MainActivity.javapackage com.example.activity16;import android.support.v7.a…

安裝python擴展庫時只能使用pip_安裝 Python 擴展庫時只能使用 pip 工具在線安裝,如果安裝不成功就沒有別的辦法了。_學小易找答案...

【單選題】關于Python中的復數,下列說法錯誤的是_________________。【填空題】在Python程序中,導入sys模塊后,可以通過列表________________訪問命令行參數。_________________表示Python腳本名;____________________表示第一個參數。【簡答題】嘗試用顏色 表達 冷暖 感覺 !【…

opencv java_opencv的Java開發環境配置(IntelliJ idea)

1、首先我們先到官網下載opencv的包&#xff0c;在官網下載到的是一個可運行文件&#xff0c;其實就是一個解壓程序&#xff0c;運行后會把opencv的相關文件解壓到填寫的路徑。2、 在編輯環境變量窗口&#xff0c;點擊新建&#xff0c;然后將opencv文件夾里的bin路徑復制進去&a…

java session 永不過期_Java Web Application使Session永不失效(利用cookie隱藏登錄)

在做 Web Application 時&#xff0c;因為 Web Project 有 session 自動失效的問題&#xff0c;所以如何讓用戶登錄一次系統就能長時間運行三個月&#xff0c;就是個問題。后來&#xff0c;看到 session 失效的攔截器代碼&#xff0c;就猜想能否通過攔截器來實現。查資料發現可…

java is-a_java中 is - a和 has - a的區別

Java中is-a和has-a的區別1.“is-a”是繼承的關系,比如人是動物,人和動物是繼承的關系;2.“has-a”是聚合的關系,比如人有眼睛,人和眼睛是聚合的關系;也可以理解為 is-a 是“繼承”但has-a是“接口”關系。是“相互依賴”的關系&#xff0c;同時它們的生命周期都是一樣的。我們以…

支付寶支付對賬單java_[Java]解析支付寶對賬單csv

配置相關公鑰和私鑰這些需要在支付寶的賬戶中心配置image.png這些內容在支付寶平臺上都有教程,因為下載對賬單這個功能比較簡單,不需要入聚石塔下載對賬單https://docs.open.alipay.com/20180417160701241302/fd3qt1官方文檔寫的很清楚,而且能直接用,將配置好的公鑰私鑰APPID等…

cmd編譯java文件中文亂碼_亂碼 HelloWorld 世界你好 cmd 執行輸出的中文java 顯示亂碼 解決 另附 win無法執行編譯運行javac java編譯文件的解決方案...

【博客園cnblogs筆者m-yb原創&#xff0c;轉載請加本文博客鏈接&#xff0c;筆者公眾號aandb7 愛碼一生&#xff0c;QQ群927113708, github: https://github.com/mayangbo666】這是一篇java入門:java是眾多編程語言之一, 就是開發的工具技術, 沒什么特別, 是應用廣, 嚴謹的語言…

java linux獲取實時cpu_用java取得linux系統cpu、內存的實時信息(參考別人代碼)...

/**   * cat /proc/cpuinfo - cpu (i.e. vendor, mhz, flags like mmx) * cat /proc/interrupts - 中斷   * cat /proc/ioports - 設備io端口   * cat /proc/meminfo - 內存信息(i.e. mem used, free, swap size)   * cat /proc/partitions - …

自我學習--關于如何設計光耦電路

本人在項目中多次設計光耦電路&#xff0c;目前電路在項目中運行比較平穩&#xff0c;所以總結一下自己的設計經驗&#xff0c;與大家交流一下&#xff0c;如有錯誤還希望大家指出改正&#xff0c;謝謝&#xff08;V&#xff1a;Smt15921588263&#xff1b;愿與大家多交流&…