koa mysql mongodb_GitHub - langyuxiansheng/base-restfulapi-server: 基于koa2 和mysql 还有MongoDB的 restfulA...

此项目仅作为参考,不做更新维护了. 新项目[biu-server-admin]的正在完善中,即将发布,有更小的体积,更快的速度和更精简的代码.继承原有的接口业务分离.也拥有更严格和更清晰的目录结构.

#base-restfulapi-server 服务器说明

这是一个基于Koa2的轻量级RESTful API Server服务器,支持ES6,同时集成 mysql 还有MongoDB 多个多个数据库类型,支持自定义配置。

注意:因升级Koa版本至2.3.0,为配合相应的依赖项,故需要Node.js版本大于等于v8.0.0(建议v9.9.0),NPM大于等于v5.0.0。建议使用yarn代替npm。

约定使用JSON格式传输数据,POST、PUT、DELET方法支持的Content-Type为application/x-www-form-urlencoded、multipart/form-data、application/json可配置支持跨域。非上传文件推荐application/x-www-form-urlencoded。通常情况下返回application/json格式的JSON数据。

可选用redis等非关系型数据库。考虑RESTful API Server的实际开发需要,这里通过sequelize.js作为PostgreSQL, MySQL, MariaDB, SQLite, MSSQL关系型数据库的ORM,如无需关系型ORM,npm remove sequelize -S,然后删除src/lib/sequelize.js文件。

安装了一些和Koa2不冲突的搭建RESTful API Server的必要插件,附带每一个插件的说明。采用ESlint进行语法检查。

因此服务器主要提供RESTful API,故暂时不考虑前端静态资源处理,只提供静态资源访问的基本方法便于访问用户上传到服务器的图片等资源。基本目录结构与vue-cli保持一致,可配合React、AngularJS、Vue.js等前端框架使用。在Cordova/PhoneGap中使用时需要开启跨域功能。

目前暂未加入软件测试模块,下一个版本会加入该功能并提供集成方案。建议自行集成jest。

详细说明看这里 项目的说明文档

在线测试地址

http://111.231.225.103/apis/

引入插件介绍

引入插件的版本将会持续更新

引入的插件:

koa@2 koa-body@2 koa-router@next koa-static2 koa-compose require-directory babel-cli babel-register babel-plugin-transform-runtime babel-preset-es2015 babel-preset-stage-2 gulp gulp-eslint eslint eslint-config-standard eslint-friendly-formatter eslint-plugin-html eslint-plugin-promise nodemailer promise-mysql 等

koa2: HTTP框架

Synopsis: HTTP framework.

From: https://github.com/koajs/koa v2

koa-body: body解析器

Synopsis: A full-feature koa body parser middleware.

From: https://github.com/dlau/koa-body

koa-router: Koa路由

Synopsis: Router middleware for koa.

From: https://github.com/alexmingoia/koa-router/tree/master/

koa-static2: 静态资源中间件

Synopsis: Middleware for Koa2 to serve a folder under a name declared by user.

From: https://github.com/Secbone/koa-static2

koa-compose: 多个中间件组合成一个

Synopsis: Compose several middleware into one.

From: https://github.com/koajs/compose

require-directory: 递归遍历指定目录

Synopsis: Recursively iterates over specified directory.

From: https://github.com/troygoode/node-require-directory

babel-cli: Babel编译ES6代码为ES5代码

Synopsis: Babel is a JavaScript compiler, ES6 to ES5.

From: https://github.com/babel/babel/tree/master/packages/babel-cli

babel-register: Babel开发环境实时编译ES6代码

Synopsis: Babel hook.

From: https://github.com/babel/babel/tree/master/packages/babel-cli

babel-plugin-transform-runtime: Babel配置ES6的依赖项

babel-preset-es2015: 同上

babel-preset-stage-2: 同上

gulp: 基于流的自动化构建工具

Synopsis: Gulp is a toolkit for automating painful or time-consuming tasks.

From: https://github.com/gulpjs/gulp

gulp-eslint: gulp的ESLint检查插件

Synopsis: A gulp plugin for ESLint.

From: https://github.com/adametry/gulp-eslint

gulp-nodemon: 修改JS代码后自动重启

Synopsis: nodemon will watch the files in the directory in which nodemon was started, and if any files change, nodemon will automatically restart your node application.

From: https://github.com/remy/nodemon

eslint: JavaScript语法检查工具

Synopsis: A fully pluggable tool for identifying and reporting on patterns in JavaScript.

From:

eslint-config-standard: 一个ESlint配置 Synopsis: ESLint Shareable Config for JavaScript Standard Style.

From: https://github.com/feross/eslint-config-standard

eslint-friendly-formatter: 使得ESlint提示在Sublime Text或iterm2中更友好,Atom也有对应的ESlint插件。

Synopsis: A simple formatter/reporter for ESLint that's friendly with Sublime Text and iterm2 'click to open file' functionality

From: https://github.com/royriojas/eslint-friendly-formatter

eslint-plugin-html: 检查HTML文件中的JS代码规范

Synopsis: An ESLint plugin to extract and lint scripts from HTML files.

From: https://github.com/BenoitZugmeyer/eslint-plugin-html

eslint-plugin-promise: 检查JavaScript promises

Synopsis: Enforce best practices for JavaScript promises. From: https://github.com/xjamundx/eslint-plugin-promise

eslint-plugin-promise: ESlint依赖项

Synopsis: ESlint Rules for the Standard Linter. From: https://github.com/xjamundx/eslint-plugin-standard

nodemailer: 发送邮件

Synopsis: Send e-mails with Node.JS.

From: https://github.com/nodemailer/nodemailer

promise-mysql: 操作MySQL数据库依赖

Synopsis: Promise Mysql.

From: https://github.com/lukeb-uk/node-promise-mysql

sequelize: 关系型数据库ORM

Synopsis: Sequelize is a promise-based ORM for Node.js.

From: https://github.com/sequelize/sequelize

mysql: MySQL库

Synopsis: A pure node.js JavaScript Client implementing the MySql protocol.

From: https://github.com/mysqljs/mysql

其它经常配合Koa2的插件:

koa-session2: Session中间件

Synopsis: Middleware for Koa2 to get/set session.

From: https://github.com/Secbone/koa-session2

koa-nunjucks-2:

一个好用的模版引擎,可用于前后端,nunjucks:https://github.com/mozilla/nunjucks

koa-convert: 转换旧的中间件支持Koa2

Synopsis: Convert koa generator-based middleware to promise-based middleware.

From: https://github.com/koajs/convert

koa-logger: 请求日志输出,需要配合上面的插件使用

Synopsis: Development style logger middleware for Koa.

From: https://github.com/koajs/logger

koa-onerror:

Koa的错误拦截中间件,需要配合上面的插件使用:https://github.com/koajs/onerror

koa-multer: 处理数据中间件

Synopsis: Multer is a node.js middleware for handling multipart/form-data for koa.

From: https://github.com/koa-modules/multer

目录结构说明

.

├── README.md# 项目说明文件

├── .babelrc # Babel 配置文件

├── .editorconfig # 编辑器风格定义文件

├── .eslintignore # ESlint 忽略文件列表

├── .eslintrc.js # ESlint 配置文件

├── .gitignore # Git 忽略文件列表

├── publicKey.pub # JWT公钥文件

├── gulpfile.js # Gulp配置文件

├── package.json # 描述文件

├── pm2.js # pm2 部署示例文件

├── build # build 入口目录

│   └── dev-server.js # 开发环境 Babel 实时编译入口

├── src # 源代码目录,编译后目标源代码位于 dist 目录

│   ├── app.js # 入口文件

│   ├── config.js # 主配置文件(*谨防泄密!)

│   ├── plugins # 插件目录

│   │ └── smtp_sendemail # 示例插件 - 发邮件

│   ├── tool # 工具目录

│   │ ├── Result.js # restful API统一实体返回类对象

│   │ └── Utils.js # 公共工具类

│   ├── lib # 库目录

│   │ ├── mongoUtil.js # MongoDB工具类

│   │ ├── PluginLoader.js # 插件加载的loader

│   │ ├── mysql-db.js # 原生MySQL工具类(不要和 sequelize混用 放这里是给需要的伙伴的)

│   │ └── sequelize.js # sequelize 关系型数据库ORM工具

│   ├── middleware # 中间件文件夹

│   │ ├── ErrorRoutesCatch.js # 统一错误处理

│   │ └── ValidateTools.js # 校验验工具类

│   ├── controllers # 请求控制器

│   ├── models # 数据模型

│   ├── routes # 路由器

│   └── services # 业务逻辑服务

├── assets # 静态资源目录

└── logs # 日志目录

更新说明

v1.0.3 2018年11月29日23:32:09

增加日志系统

增加公共服务,添加验证码生成接口

v1.0.2 2018年11月22日15:45:56

更新整理目录结构.整理models

新增权限管理系统

添加sqls 目前系统用到的数据库文件备份

*v1.0.1 2018年11月11日11:44:49

更新mongoDB工具类 增加输出指定字段和分页查询

v1.0.0 2018年11月9日10:06:14

创建项目。

参考资料:

参考基础框架,基于框架新增和修改了一些业务逻辑,因为业务需要,集成了多种数据库(MySQL和MongoDB)

关于Redis 的说明

如果对你有帮助的话,欢迎star,有问题请在此留言

也可以在github Issues提问 或者直接 联系作者 109643291@qq.com

欢迎加入作者所在的QQ群: 46153838

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1 目标检测的定义 目标检测(Object Detection)的任务是找出图像中所有感兴趣的目标(物体),确定它们的类别和位置,是计算机视觉领域的核心问题之一。由于各类物体有不同的外观、形状和姿态,加上成像时光照、遮挡等因素的干扰,目标检测一直是计算机视觉领域最具有挑战性的问题。 目标检测任务可分为两个关键的子任务,目标定位和目标分类。首先检测图像中目标的位置(目标定位),然后给出每个目标的具体类别(目标分类)。输出结果是一个边界框(称为Bounding-box,一般形式为(x1,y1,x2,y2),表示框的左上角坐标和右下角坐标),一个置信度分数(Confidence Score),表示边界框中是否包含检测对象的概率和各个类别的概率(首先得到类别概率,经过Softmax可得到类别标签)。 1.1 Two stage方法 目前主流的基于深度学习的目标检测算法主要分为两类:Two stage和One stage。Two stage方法将目标检测过程分为两个阶段。第一个阶段是 Region Proposal 生成阶段,主要用于生成潜在的目标候选框(Bounding-box proposals)。这个阶段通常使用卷积神经网络(CNN)从输入图像中提取特征,然后通过一些技巧(如选择性搜索)来生成候选框。第二个阶段是分类和位置精修阶段,将第一个阶段生成的候选框输入到另一个 CNN 中进行分类,并根据分类结果对候选框的位置进行微调。Two stage 方法的优点是准确度较高,缺点是速度相对较慢。 常见Tow stage目标检测算法有:R-CNN系列、SPPNet等。 1.2 One stage方法 One stage方法直接利用模型提取特征值,并利用这些特征值进行目标的分类和定位,不需要生成Region Proposal。这种方法的优点是速度快,因为省略了Region Proposal生成的过程。One stage方法的缺点是准确度相对较低,因为它没有对潜在的目标进行预先筛选。 常见的One stage目标检测算法有:YOLO系列、SSD系列和RetinaNet等。 2 常见名词解释 2.1 NMS(Non-Maximum Suppression) 目标检测模型一般会给出目标的多个预测边界框,对成百上千的预测边界框都进行调整肯定是不可行的,需要对这些结果先进行一个大体的挑选。NMS称为非极大值抑制,作用是从众多预测边界框中挑选出最具代表性的结果,这样可以加快算法效率,其主要流程如下: 设定一个置信度分数阈值,将置信度分数小于阈值的直接过滤掉 将剩下框的置信度分数从大到小排序,选中值最大的框 遍历其余的框,如果和当前框的重叠面积(IOU)大于设定的阈值(一般为0.7),就将框删除(超过设定阈值,认为两个框的里面的物体属于同一个类别) 从未处理的框中继续选一个置信度分数最大的,重复上述过程,直至所有框处理完毕 2.2 IoU(Intersection over Union) 定义了两个边界框的重叠度,当预测边界框和真实边界框差异很小时,或重叠度很大时,表示模型产生的预测边界框很准确。边界框A、B的IOU计算公式为: 2.3 mAP(mean Average Precision) mAP即均值平均精度,是评估目标检测模型效果的最重要指标,这个值介于0到1之间,且越大越好。mAP是AP(Average Precision)的平均值,那么首先需要了解AP的概念。想要了解AP的概念,还要首先了解目标检测中Precision和Recall的概念。 首先我们设置置信度阈值(Confidence Threshold)和IoU阈值(一般设置为0.5,也会衡量0.75以及0.9的mAP值): 当一个预测边界框被认为是True Positive(TP)时,需要同时满足下面三个条件: Confidence Score > Confidence Threshold 预测类别匹配真实值(Ground truth)的类别 预测边界框的IoU大于设定的IoU阈值 不满足条件2或条件3,则认为是False Positive(FP)。当对应同一个真值有多个预测结果时,只有最高置信度分数的预测结果被认为是True Positive,其余被认为是False Positive。 Precision和Recall的概念如下图所示: Precision表示TP与预测边界框数量的比值 Recall表示TP与真实边界框数量的比值 改变不同的置信度阈值,可以获得多组Precision和Recall,Recall放X轴,Precision放Y轴,可以画出一个Precision-Recall曲线,简称P-R
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值