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.mzph.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;愿与大家多交流&…