Socket
Socket
Sign inDemoInstall

less.js

Package Overview
Dependencies
18
Maintainers
1
Versions
143
Alerts
File Explorer

Advanced tools

Install Socket

Detect and block malicious and high-risk dependencies

Install

    less.js

A write less, do more MVC framework based on Koa.


Version published
Weekly downloads
184
decreased by-36.11%
Maintainers
1
Install size
16.7 MB
Created
Weekly downloads
 

Readme

Source

简介

  • 项目:基于 Koa.js 的 Node.js MVC 框架。
  • 仓库地址:https://github.com/zhaotoday/less.js

版本

  • 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
安全
其他参考

Keywords

FAQs

Last updated on 22 Nov 2019

Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc