建设商城网站视频教学,外链在线发布工具,做本地房产网站,微信如何开公众号tms-koa基于koa的轻量级快速开发框架#xff0c;包含 MVC 中的 M 和 C 两部分#xff0c;适合于实现 API 服务和前后端彻底分离的应用。内置基于 access_token 的访问鉴权机制#xff0c;更容易实现 API 调用的负载分担。内置通过连接池访问 MySQL 数据库#xff0c;支持进…tms-koa基于koa的轻量级快速开发框架包含 MVC 中的 M 和 C 两部分适合于实现 API 服务和前后端彻底分离的应用。内置基于 access_token 的访问鉴权机制更容易实现 API 调用的负载分担。内置通过连接池访问 MySQL 数据库支持进行读写分离。内置 SQL 语句的封装内置 escape 防止 sql 注入。目前 where 条件中existsandor 形成的 sql 不会进行 escape 处理需要在外部自行处理。select 中的 fields 和 table 未进行 escape 处理不能够直接使用用户输入的内容作为字段名和表名。orderby 和 groupby 未做 escape 处理不能够直接使用用户输入。内置支持上传文件。安装npm install tms-koa --save注意tms_dbmongodbmongooseredis 这 4 个依赖包采用peerDependencies不会进行自动安装如果需要使用可以手动安装。tms-db 的依赖包 mysql 和 better-sqlite3 采用peerDependencies不会进行自动安装如果需要使用可以手动安装。测试安装pm2(如果没装过)cnpm i pm2 -g通过pm2启动npm run pm2启动 Redis 和 MongoDbdocker-compose up -d发送获得 token 的请求http://localhost:3001/auth/authorize发送调用 api 的请求http://localhost:3001/api/tryGet?access_tokenvaluehello建立新应用配置信息在项目的根目录下建立文件/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?valuehello但是不在 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)内容名AccessTokentoken字符串用户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 pathdomain 和 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 Tags0.0.64 ... latest (22 days ago)60 Versions0.0.64 ... 22 days ago0.0.63 ... 23 days ago0.0.62 ... a month ago0.0.61 ... 2 months ago0.0.60 ... 2 months ago0.0.59 ... 2 months ago0.0.58 ... 2 months ago0.0.57 ... 2 months ago0.0.56 ... 2 months ago0.0.55 ... 2 months ago0.0.54 ... 2 months ago0.0.53 ... 3 months ago0.0.52 ... 3 months ago0.0.50 ... 4 months ago0.0.49 ... 7 months ago0.0.48 ... 7 months ago0.0.47 ... 7 months ago0.0.46 ... 8 months ago0.0.45 ... 8 months ago0.0.44 ... 8 months ago0.0.43 ... 8 months ago0.0.42 ... 8 months ago0.0.41 ... 8 months ago0.0.40 ... 9 months ago0.0.39 ... 9 months ago0.0.38 ... 9 months ago0.0.37 ... 9 months ago0.0.36 ... 9 months ago0.0.35 ... 9 months ago0.0.34 ... 10 months ago0.0.33 ... 10 months ago0.0.32 ... 10 months ago0.0.31 ... a year ago0.0.30 ... a year ago0.0.29 ... a year ago0.0.28 ... a year ago0.0.27 ... a year ago0.0.26 ... a year ago0.0.25 ... a year ago0.0.22 ... a year ago0.0.21 ... a year ago0.0.20 ... a year ago0.0.19 ... a year ago0.0.18 ... a year ago0.0.17 ... a year ago0.0.16 ... a year ago0.0.15 ... a year ago0.0.13 ... a year ago0.0.12 ... a year ago0.0.11 ... a year ago0.0.10 ... a year ago0.0.9 ... a year ago0.0.8 ... a year ago0.0.7 ... a year ago0.0.6 ... a year ago0.0.5 ... a year ago0.0.4 ... a year ago0.0.3 ... a year ago0.0.2 ... a year ago0.0.1 ... a year ago