1.1.2 • Published 3 years ago

mvk v1.1.2

Weekly downloads
46
License
MIT
Repository
-
Last release
3 years ago

Koa的应用层框架

注意:依赖 Redis 储存 Session,请先配置mysql和本机安装redis

$ npm i -g mvk

开始使用吧

创建项目

$ mvk create myapp

安装依赖

$ cd myapp
$ npm install

运行

npm run run

配置 mysql 和 Redis

config/default.js 配置

export default {
  mysql: { user: '用户名', password: '密码', database: '库名', host: '127.0.0.1' },
  session: { name: 'sessid', maxAge: 2626560000, redis: {} //redis配置 可选}
}

目录结构

project
├── package.json
├── main.js
├── app
│ ├── app.js (可选)
│ ├── controller
│ | └── home.js
│ └── service (可选)
│ └── home.js
├── static
└── config
└── default.js

  • /main.js 入口文件
  • /app/app.js 运行时生命周期文件,可处理运行时的错误回调等
  • /app/controller/*.js 控制器,用于解析用户的输入,处理后返回相应的结果
  • /app/service/*.js 用于编写业务逻辑层,可选,建议使用
  • /config/default.js 默认配置文件,在 controllerservice 可通过 this.config.文件名 访问,可声明多个配置文件
  • /static/ 存放静态资源文件夹

说明

  • 路由

路由默认自动注册,以控制器 app/controller 文件夹里文件名称注册,例如以上注册为:/api/home/home

自定义;你可以在 app/app.js 导出 router(add) 方法自定义路由,例子:

export default {
  router(add) {
    add('get', '/home/:id', 'home.home')
  }
}

add 方法接受接受三个参数:请求类型、路径、控制器.方法

  • 参数校验

你可以在控制器声明同名静态属性描述参数(这不是必须的),例子:

import { Controller } from 'mvk'

export default class extends Controller {
  static home = { id: 'int' }
  async home(id) {
    return this.service('user').getList(id)
  }
}

将会从请求中拿到名为 id 的参数传递调用 home 方法(POST,GET),支持的类型如下:

{
  id: 'int', //Number 不带小数点
  id: 'int?', //Number 不强制的参数用?声明
  name: 'string', //String 字符串
  name: 'string 2,16' //String 字符串最大允许16个字符,最少需要2个字符
  name: 'string 12' //String 字符串最大允许12个字符
  id: 'float' //Number 带小数点
  image: 'file' //File 需要一个文件
  image: 'file 300000' //File 限制文件大小
  image: 'file image/png,30000' 限制文件类型和大小
  images: 'files' //File[] 多文件,参数同上
  date: 'date' //Date 对象
  is: 'boolean' //Boolean 布尔值 可使用
  is: 'bool' //Boolean 别名 同上
}
  • SESSION 模块

ControllerService 类实例化时会挂载 session 和 mysql

import { Controller } from 'mvk'

export default class extends Controller {
  async home(id) {
    this.session.userInfo={id:12}
  }
}

注意:操作 session 时必须在 return 之前,即请求完成后操作session 不再会储存到 redissession 对象的属性值必须是可JSON序列化,意味着储存函数是无效的。

属性:
session.sessionId -> 当前用户的 session ID
session.delete(id) -> 删除,不传递 id 则删除当前用户,如果传递 null 则清空所有,删除所有或当前用户后 对 session 的赋值不再会储存到 redis

  • MYSQL 模块
import { Service } from 'mvk'

export default class extends Service {
  async home(id) {
    const conn = await this.mysql()
    const list = await conn.select('*','user').where({ id: 1}).run()
    conn.end()
    return list
  }
}

mysql模块默认采用连接池的连接方式

Service中调用this.mysql()从连接池中获取一个连接进行查询,在查询完成后请务必调用end方法将连接放回连接池中。

  • mysql 进阶

mysql模块基于mysql2增加了selectupdatedeleteinsert方法,分别对应mysql的基本四种操作,并且扩展了查询方式,例如:

import { Service } from 'mvk'

export default class extends Service {
  async home(id,file) {
    const conn = await this.mysql()
    const list = await conn.insert('user',{id:1,qrcode:file}).run()
    conn.end()
    return list
  }
}

以上演示了往mysql插入一个file文件,参数为用户上传文件的File对象,本质上不会往mysql储存二进制文件,而是计算文件的sha256作为参数值,然后将文件储存到目录下。
要允许该操作,请在/config/default.js配置参数

export default {
  mysql_file: {
    path: 'static/', //文件保存的路径
    //允许储存的表名称和字段名称
    table: {
      user: ['qrcode','avater'],
    },
    suffix: '.zip' //文件后缀名  可选
  }
}

文件储存为static/36f6721c2f76ee8be791f190e641bafd9e694993255e8adc61f21fc12d1a7f0b.zip

同理在调用mysql的update,delete时,会查询数据表是否还有数据引用该文件,如果没有引用会彻底删除该文件。

  • where 条件
import { Service } from 'mvk'

export default class extends Service {
  async home(id) {
    const conn = await this.mysql()
    const list = await conn.select('*','user').where({ id: 1,name: undefined,cancel:null,year:()=>'now()'}).run()
    //select * from `user` where id=1 and cancel is null and year=now()
    conn.end()
    return list
  }
}
  • update 更新值
import { Service } from 'mvk'

export default class extends Service {
  async home(id) {
    const conn = await this.mysql()
    const list = await conn.update('user',{id:undefined,name:null,year:()=>'year+1'}).where({ id: 1}).run()
    //update `user` set name=null,year=year+1 where id=1
    return list
  }
}
1.1.2

3 years ago

1.1.1

3 years ago

1.1.0

3 years ago

1.0.9

3 years ago

1.0.89

3 years ago

1.0.88

3 years ago

1.0.87

3 years ago

1.0.86

3 years ago

1.0.85

3 years ago

1.0.84

3 years ago

1.0.83

3 years ago

1.0.81

3 years ago

1.0.8

3 years ago

1.0.7

3 years ago

1.0.6

3 years ago

1.0.5

3 years ago

1.0.4

3 years ago

1.0.2

3 years ago

1.0.3

3 years ago

1.0.1

3 years ago

1.0.0

3 years ago