3.0.5 • Published 4 years ago

less.js v3.0.5

Weekly downloads
14
License
ISC
Repository
github
Last release
4 years ago

简介

版本

  • v3.0.1 2019-10-30 重构、性能优化、废除对视图层(view)的支持;
  • v2.0.9 2019-04-11 性能优化;
  • v2.0.0 2019-02-15 取消内置第三方 SDK;
  • v1.1.4 2018-12-29 支持 URL Rewrite;
  • v1.1.0 2018-12-27 支持 Redis 数据库,通过 ORM 框架 jugglingdb 操作 Redis;
  • v1.0.9 2018-12-23 支持同步 MySQL 数据库模型;
  • v1.0.8 2018-12-20 支持根据 controllers 目录结构自动生成对应路由,无需手动配置路由;
  • v1.0.5 2018-12-10 取消 koa-jwt 中间件,在 controller 基础类中进行 JWT 校验;

待办

  • 同步 MySQL 数据至 Redis;

示例

示例代码

请查看 example 文件夹。

管理后台代码

请访问 https://github.com/zhaotoday/iview

线上示例

请访问 https://admin.cmsx.cn/

账号:admin
密码:123456

注:按 F12 打开 Chrome 开发者工具查看接口请求。

运行

Node.js 版本

Koa2 使用了 async/await 等新语法,请保证 Node.js 版本在 7.6 及以上。

应用配置

修改 package.json,将 {app-name} 改成自己的:

{
  ...,
  "scripts": {
    "stop": "pm2 stop {app-name}"
  },
  ...
}

修改 processes.json,将 {app-name} 改成自己的:

{
  "apps": [
    {
      "name": "{app-name}",
      ...
    },
    ...
  ]
}

命令

# 安装 pm2 到全局
$ npm install -g pm2

# 安装 less.js
$ npm install --save less.js

# JS 代码校验
$ npm run eslintfix
$ npm run eslint

# 开发调试
$ npm run dev

# 启动项目
$ npm run start:dev

# 同步数据库模型
$ npm run sync-models:dev

# 停止项目
$ npm run stop

注::dev 表示执行命令时调用的是开发环境的配置。dev 表示开发环境,test 表示测试环境,beta 表示预生产环境,prod 表示生产环境。

目录结构

整体目录结构

├─ src                     源码
│  ├─ app                  业务代码
│  │  ├─ controllers       控制器:用于解析用户输入,处理后返回相应的结果
│  │  ├─ models            模型  :用于定义数据模型
│  │  └─ services          服务  :用于编写业务逻辑层,比如连接数据库,调用第三方接口等
│  │
│  ├─ config               配置
│  ├─ extends              扩展
│  ├─ middlewares          中间件
│  ├─ public               静态资源
│  ├─ redis                Redis 数据库
│  ├─ router               URL 路由
│  ├─ utils                工具库
│  └─ index.js             入口:用于自定义启动时的初始化工作,比如启动 https,调用中间件、路由等
│  
├─ .eslintrc               eslint 配置文件
├─ nodemon.json            nodemon 配置文件
├─ package.json            npm 配置文件
├─ processes.json          pm2 配置文件

配置(config)目录结构

├─ config                  配置
│  ├─ base.js              基础配置
│  ├─ development.js       开发环境配置
│  ├─ test.js              测试环境配置
│  ├─ beta.js              预生产环境配置
│  └─ production.js        生产环境配置

扩展(extends)目录结构

├─ extends                 扩展
│  ├─ controller.js        对控制器进行扩展
│  ├─ helpers.js           对辅助函数进行扩展
│  ├─ initialize.js        初始化
│  └─ service.js           对服务进行扩展

控制器(controllers)目录结构

├─ controllers          控制器
│  └─ v1                接口版本
│     ├─ admin          管理接口
│     │  ├─ actions     动作类接口
│     │  │
│     │  ├─ articles.js articles 接口控制器
│     │  └─ files.js    files 接口控制器
│     │
│     ├─ public         公开接口(无需鉴权即可调用)
│     │
│     └─ some-app       某个应用的接口

扩展

对 Koa.js 的一些扩展,用 $ 前缀命名,与 Koa.js 内置对象做区分。

app.$config:配置
app.$module:加载内置模块
app.$helpers:辅助函数
app.$resources:生成 RESTful 规范的路由
app.$model:公用模型对象
app.$Service:服务基类
app.$Controller:控制器基类
app.$models:模型集合
app.$services:服务集合
app.$controllers:控制器集合

如扩展辅助函数,请新建 src/extends/helpers.js:

module.exports = app => {
  return {
    myFunc () {}
  }
}

示例代码

模型

src/app/models/articles.js

module.exports = app => {
  const { STRING, TEXT, INTEGER } = app.$Sequelize

  return app.$model.define('articles', {
    id: {
      type: INTEGER(10).UNSIGNED,
      primaryKey: true,
      autoIncrement: true,
      allowNull: false,
      comment: 'ID'
    },
    title: {
      type: STRING(200),
      allowNull: false,
      comment: '标题'
    },
    content: {
      type: TEXT('long'),
      comment: '内容'
    }
  })
}

服务

src/app/services/articles.js

module.exports = app => {
  return class extends app.$Service {
    constructor () {
      super()

      this.model = app.$models.articles
    }
  }
}

控制器

src/app/controllers/api/v1/public/articles.js

module.exports = app => {
  const service = app.$services.articles

  return class extends app.$Controller {
    async index (ctx, next) {
      ctx.send({
        status: 200,
        data: await service.find({ offset: 0, limit: 10 })
      })
    }
  }
}

路由

src/router/index.js

const router = require('koa-router')()

module.exports = app => {
  router.get('/', app.$controllers.web.home.index)
  router.get('/articles/:id?', app.$controllers.web.articles.index)

  app.use(router.routes()).use(router.allowedMethods())
}

参考

文档

文章

MySQL

Redis

安全

其他参考

3.0.4

4 years ago

3.0.5

4 years ago

3.0.3

4 years ago

3.0.2

5 years ago

3.0.1

5 years ago

2.0.31

5 years ago

2.0.30

5 years ago

2.0.29

5 years ago

2.0.28

5 years ago

2.0.27

5 years ago

2.0.26

5 years ago

2.0.25

5 years ago

2.0.24

5 years ago

2.0.23

5 years ago

2.0.22

5 years ago

2.0.21

5 years ago

2.0.20

5 years ago

2.0.19

5 years ago

2.0.18

5 years ago

2.0.17

5 years ago

2.0.16

5 years ago

2.0.15

5 years ago

2.0.14

5 years ago

2.0.13

5 years ago

2.0.12

5 years ago

2.0.11

5 years ago

2.0.10

5 years ago

2.0.9

5 years ago

2.0.8

5 years ago

2.0.7

5 years ago

2.0.6

5 years ago

2.0.5

5 years ago

2.0.4

5 years ago

2.0.3

5 years ago

2.0.1

5 years ago

2.0.0

5 years ago

1.1.16

5 years ago

1.1.15

5 years ago

1.1.14

5 years ago

1.1.13

5 years ago

1.1.12

5 years ago

1.1.11

5 years ago

1.1.10

5 years ago

1.1.9

5 years ago

1.1.8

5 years ago

1.1.7

5 years ago

1.1.6

5 years ago

1.1.5

5 years ago

1.1.4

5 years ago

1.1.3

5 years ago

1.1.2

5 years ago

1.1.1

5 years ago

1.0.22

5 years ago

1.0.21

5 years ago

1.0.20

5 years ago

1.0.19

5 years ago

1.0.18

5 years ago

1.0.17

5 years ago

1.0.16

5 years ago

1.0.15

5 years ago

1.0.14

5 years ago

1.0.12

5 years ago

1.0.10

5 years ago

1.0.9

5 years ago

1.0.8

5 years ago

1.0.7

5 years ago

1.0.6

5 years ago

1.0.5

5 years ago

1.0.4

5 years ago

1.0.3

5 years ago

1.0.2

5 years ago

1.0.1

5 years ago

0.0.75

5 years ago

0.0.74

5 years ago

0.0.73

6 years ago

0.0.72

6 years ago

0.0.71

6 years ago

0.0.70

6 years ago

0.0.69

6 years ago

0.0.68

6 years ago

0.0.67

6 years ago

0.0.66

6 years ago

0.0.65

6 years ago

0.0.64

6 years ago

0.0.63

6 years ago

0.0.62

6 years ago

0.0.61

6 years ago

0.0.60

6 years ago

0.0.59

6 years ago

0.0.58

6 years ago

0.0.57

6 years ago

0.0.56

6 years ago

0.0.55

6 years ago

0.0.54

6 years ago

0.0.53

6 years ago

0.0.52

6 years ago

0.0.51

6 years ago

0.0.50

6 years ago

0.0.49

6 years ago

0.0.48

6 years ago

0.0.47

6 years ago

0.0.46

6 years ago

0.0.45

6 years ago

0.0.44

6 years ago

0.0.43

6 years ago

0.0.41

6 years ago

0.0.40

6 years ago

0.0.39

6 years ago

0.0.38

6 years ago

0.0.37

6 years ago

0.0.36

6 years ago

0.0.35

6 years ago

0.0.34

6 years ago

0.0.33

6 years ago

0.0.32

6 years ago

0.0.31

6 years ago

0.0.30

6 years ago

0.0.29

6 years ago

0.0.28

6 years ago

0.0.27

6 years ago

0.0.26

6 years ago

0.0.25

6 years ago

0.0.24

6 years ago

0.0.23

6 years ago

0.0.22

6 years ago

0.0.21

6 years ago

0.0.20

6 years ago

0.0.19

6 years ago

0.0.18

6 years ago

0.0.17

6 years ago

0.0.16

6 years ago

0.0.15

6 years ago

0.0.14

6 years ago

0.0.13

6 years ago

0.0.12

6 years ago

0.0.11

6 years ago

0.0.10

6 years ago

0.0.8

6 years ago

0.0.7

6 years ago

0.0.4

6 years ago

0.0.3

6 years ago

0.0.2

6 years ago

0.0.1

6 years ago