node+koa2+sequelize+mysql+pm2 (欢迎star)
## 简介
- [x] koa2 作为主要node service 入口
- [x] webpack 打包node 环境
- [x] pm2 [服务负载均衡](http://pm2.keymetrics.io/)
- [x] mysql 数据库
- [x] sequelize 强大的事务 [mysql](https://github.com/demopark/sequelize-docs-Zh-CN)
- [x] koa-body,文件上传中间件
- [x] koa-cors koa 跨域中间件
- [x] validator 参数校验器自动返回 JSON message和key
- [x] log4[ 日志输出](https://www.npmjs.com/package/log4js)
......
### 项目Link
- [客户端](https://github.com/shanyanwt/koa_vue_blog/tree/master/blog.client)
- [管理端](https://github.com/shanyanwt/koa_vue_blog/tree/master/blog.manage)
### 依赖
```
node -v 10.0.0
npm -v 5.3.0
npm2 -v 3.5.1
```
## 目录
```
.
├─auto //sequelize-auto 自动生成 models实体类
└─src
| main.js //入口文件
| router.js // controller 入口
|
├─config //配置文件
├─controller //api层
├─models // 实体类
├─test // 测试类
├─utils // 工具类
└─validator //参数校验器
```
## 部署
```
git https://github.com/shanyanwt/koa_vue_blog.git
npm install & yarn
开发环境
npm run dev
localhost:8081
生产环境
npm run build //生成app.js
npm run pm2
localhost:8081
```
## supervisor nodejs 热加载 开发环境使用
如果没有加入的执行 npm install -g supervisor
supervisor -w src ,添加需要监听的文件,默认是全部但是有时不起作用,加上监听的文件即可
## 创建数据库连接
> sequelize 连接mysql
```
sequelize 安装
$> npm i sequelize mysql mysql2 --save-dev
```
> 创建连接
```
var Sequelize = require('sequelize');
var sequelize = new Sequelize(dbName, dbUser, dbPas, {
host: dbHost,
dialect: 'mysql',
pool: {
max: 5,
min: 0,
idle: 10000
},
define: {
timestamps: false //关闭时间戳
}
})
//测试连接
sequelize.authenticate().then(() => {
// 连接成功
}).catch(err => {
//在这里可以添加邮箱通知
});
```
- [sequelize](https://github.com/demopark/sequelize-docs-Zh-CN/tree/master) wiki
方法名 | 属性| 返回结果
--- |--- |---
create| 添加 |return 所添加信息 Object
bulkCreate| 批量添加 |return 所添加信息 Array
findOne| 查询单条 |return Object
findByPk| 根据主键查询 |return Object
findAll| 查询 |return Array
findAndCountAll| 分页查询 |return Object -> count:Number,rows:Array
update| 更新 |return 1 or 0 Number
destroy | 删除 | return 1or 0 Number
max('age') | 计算最大 | return Object
min('age') | 计算最小 | return Object
sum('age') | 计算总和 | return Object
count | 查询条数 | return 1or 0 Number
query | 原始sql查询 | return Object
- sequelize属性方法 wiki
方法名 | 属性| 备注
--- |--- |---
attributes:['id'] | 包含条件查询 | 只查询id
db.literal('`star_number` +1') | 自定义字符|不会转义,可作为sql执行
db.transaction| 事物处理|可对批量操作进行事物处理,失败自行pormise处理或者 throw new Error(), 自行回滚
ps: db是从modes中导出已连接库的sequelize
## models生成 sequelize-auto 插件
> models生成 可在auto 目录中执行密令
```
1. 进入 auto文件夹输入
$ node auto.js
2. 执行完 auto.js 会生成models及表实体类并且导出为index.js
```
> auto.js文件所执行命令,也可手动在终端输入此命令
```
sequelize-auto -h "数据库地址" -d "数据库名" -u "用户名" -x "密码" -p "端口号" --dialect mysql -o "生成文件的路径"
```
## LinValidator 参数校验器
自定校验传入参数是否正确,错误将会返回错误 JSON message和key
1.userValidator.js
```
引入
const {
XValidator,
Rule
} = require('../validator/validator.js');
/*
模拟用户注册规则
*/
class RegisterValidator extends LinValidator {
constructor() {
super();
//链式校验规则
this.name = [
new Rule('isNotEmpty', '昵称不可为空'),
new Rule('isLength', '昵称长度必须在2~10之间', 2, 10)
];
this.email = [
new Rule('isOptional'),
new Rule('isEmail', '电子邮箱不符合规范,请输入正确的邮箱')
];
this.password = [
// 自定义matches 方法
new Rule(
'matches',
'密码长度必须在6~22位之间,包含字符、数字和 _ ',
/^[A-Za-z0-9_*&$#@]{6,22}$/
)
];
this.confirm_password = new Rule('isNotEmpty', '确认密码不可为空');
}
/*
自定义 calidate 校验规则
必须以 calidate开头的一个方法, data是传入参数
成功是 返回true
错误 ConfirmPassword
*/
validateConfirmPassword(data) {
if (!data.body.password || !data.body.confirm_password) {
return [false, '两次输入的密码不一致,请重新输入'];
}
let ok = data.body.password === data.body.confirm_password;
if (ok) {
return ok;
} else {
return [false, '两次输入的密码不一致,请重新输入'];
}
}
}
module.exports = {
RegisterValidator
};
```
2. user.js
```
const {
RegisterValidator
} = require('./userValidator.js');
const testRegister = async ctx => {
//调用 RegisterValidator
// 校验合法继续向下走 ,不可发则抛出异常 throw Error()
const v = await new RegisterValidator().validate(ctx);
/* v 返回 body, query ,params,header请求参数
链式取值 可以防止多层对象无结值的错误
*/
// post取值
var name = v.get('body.user.index.items.name')
// get取值
var getName = v.get('query.name')
/**.不合法将会返回
{
"error_code": 20001,
"error_message": {
"name": "昵称不可为空",
"password": "密码长度必须在6~22位之间,包含字符、数字和 _ ",
"confirm_password": "确认密码不可为空",
"ConfirmPassword": "两次输入的密码不一致,请重新输入"
}
}
*/
}
```
## 生产环境部署 pm2 配置
> 生产环境 centos 7 以及上述所有依赖
```
全局安装 npm install pm2 -g
$ pm2 -v
> 3.5.1
配置 pm2.conf.json
打印日志输出文件
"out_file": "./out.log",
"error_file": "./out.log"
"instances": 2 //打开多任务作为负载均衡
```
## 生产部署步骤
1. build 生成app.js
```
npm run build
```
2. 上传服务器文件
![image](https://img-blog.csdnimg.cn/20190806104358975.png)
3. 安装依赖
```
npm install
```
4. pm2 服务部署
```
$ npm run pm2 //启动服务
ps: 确保已安装,上述依赖 $ npm install pm2 -g
```
![image](https://img-blog.csdnimg.cn/20190806111004360.png)
$ pm2 list //查看已运行服务
![image](https://img-blog.csdnimg.cn/2019080611103250.png)
$pm2 logs //查看服务日志
![image](https://img-blog.csdnimg.cn/20190806111651791.png)
$ pm2 stop 0 //停止响应的进程
ps: 在此服务已经发布完成,可以根据服务器 ip:8081调用,在次更新只需把打好的app.js上传服务器,重启即可
### 我是一只孤独的狼......[欢迎star](https://github.com/shanyanwt/koa_vue_blog)
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
软件开发设计:应用软件开发、系统软件开发、移动应用开发、网站开发C++、Java、python、web、C#等语言的项目开发与学习资料 硬件与设备:单片机、EDA、proteus、RTOS、包括计算机硬件、服务器、网络设备、存储设备、移动设备等 操作系统:LInux、树莓派、安卓开发、微机操作系统、网络操作系统、分布式操作系统等。此外,还有嵌入式操作系统、智能操作系统等。 网络与通信:数据传输、信号处理、网络协议、网络与通信硬件、网络安全网络与通信是一个非常广泛的领域,它涉及到计算机科学、电子工程、数学等多个学科的知识。 云计算与大数据:包括云计算平台、大数据分析、人工智能、机器学习等,云计算是一种基于互联网的计算方式,通过这种方式,共享的软硬件资源和信息可以按需提供给计算机和其他设备
资源推荐
资源详情
资源评论
收起资源包目录
koa+mysql+vue+iview 基于node前后端分离blog项目.zip (148个子文件)
.babelrc 81B
base.css 4KB
base.css 2KB
nodtotherhythm.gif 183KB
.gitignore 240B
.gitignore 240B
.gitignore 47B
.gitignore 38B
img.html 3KB
index.html 611B
index.html 599B
logo.ico 4KB
favicon.ico 4KB
01.jpg 49KB
ba.jpg 35KB
cacheUtils.js 14KB
cacheUtils.js 13KB
utils.js 10KB
validator.js 9KB
utils.js 9KB
dateFormat.js 8KB
dateFormat.js 8KB
utils.js 7KB
c-star.js 7KB
c-file.js 6KB
c-user.js 5KB
fileUtils.js 5KB
consts.js 5KB
coldTag.js 4KB
dateFilter.js 4KB
dateFilter.js 4KB
userInfoUtils.js 4KB
c-artice.js 4KB
download.js 3KB
httpUtils.js 3KB
extended-validator.js 3KB
consts.js 3KB
dateFormat.js 3KB
test.js 3KB
user.js 3KB
errorMessag.js 2KB
consts.js 2KB
createModelsExport.js 2KB
exception.js 2KB
c-music.js 2KB
index.js 2KB
index.js 2KB
c-upload.js 2KB
auto.js 1KB
main.js 1KB
testValidator.js 1KB
index.js 1KB
router.js 1KB
skd_article.js 1KB
router.js 1KB
amfeFlexible.js 1KB
skd_admin.js 1KB
mysql.js 1KB
auth.js 1KB
logConf.js 1012B
default.js 975B
webpack.config.js 965B
extend.js 959B
email.js 938B
WXBizDataCrypt.js 903B
httpUtils.js 896B
index.js 890B
main.js 786B
index.js 695B
skd_star.js 657B
skd_role.js 636B
index.js 633B
bus.js 596B
sequelizeUtils.js 520B
star.js 512B
typeFilter.js 500B
domain.js 497B
vue.config.js 476B
token.js 464B
_mysql_session_store.js 427B
moneyFilter.js 425B
scopes.js 415B
domain.js 398B
baiduZhanzhang.js 365B
main.js 282B
vue.config.js 171B
navData.js 99B
babel.config.js 73B
babel.config.js 73B
package.json 2KB
package.json 1KB
package.json 1KB
logConf.json 620B
pm2.conf.json 446B
404.less 1KB
main.less 323B
yarn.lock 389KB
yarn.lock 389KB
yarn.lock 224KB
README.md 7KB
共 148 条
- 1
- 2
资源评论
妄北y
- 粉丝: 1w+
- 资源: 1万+
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功