V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
ruoxie
V2EX  ›  Node.js

[开源]lazy-mock ,一个生成后端模拟数据的懒人工具

  •  
  •   ruoxie · 2018-06-30 22:47:24 +08:00 · 4361 次点击
    这是一个创建于 2372 天前的主题,其中的信息可能已经有所发展或是发生改变。

    lazy-mock

      lazy-mock 是基于koa2构建的,使用lowdb持久化数据到 JSON 文件。只需要简单的配置就可以实现和json-server差不多的功能,但是比 json-server 更加灵活,后期可配置性更强,完全可以模拟真实后端业务逻辑。

      lazy-mock 默认包含了 jwt 实现的登录与登出,实现了基于 RBAC 模型的通用权限控制逻辑。具体可查看vue-quasar-admin

    Clone

    git clone https://github.com/wjkang/lazy-mock.git
    

    Install

    npm install
    

    Run

    npm run start
    

    使用 Postman 模拟登录功能

    image

    Use

    下面通过模拟图书的增删改查 介绍 lazy-mock 的简单使用

    修改 codeGenerate/config/config.js:

    export default {
        ApiServer:'http://localhost:3000',
        ServerRootPath:'G:/GitHubProject/lazy-mock',
        //server
        RouteRelativePath:'/src/routes/',
        ControllerRelativePath:'/src/controllers/',
        ServiceRelativePath:'/src/services/',
        ModelRelativePath:'/src/models/',
        DBRelativePath:'/src/db/'
    }
    

    只需要修改ServerRootPath为当前项目的根目录。

    接着修改 codeGenerate/config/model.js:

    
    var shortid = require('shortid')
    var Mock = require('mockjs')
    var Random = Mock.Random
    
    //必须包含字段 id
    export default {
        name: "book",
        Name: "Book",
        properties: [
            {
                key: "id",
                title: "id"
            },
            {
                key: "name",
                title: "书名"
            },
            {
                key: "author",
                title: "作者"
            },
            {
                key: "press",
                title: "出版社"
            }
        ],
        buildMockData: function () {//不需要生成设为 false
            let data = []
            for (let i = 0; i < 100; i++) {
                data.push({
                    id: shortid.generate(),
                    name: Random.cword(5, 7),
                    author: Random.cname(),
                    press: Random.cword(5, 7)
                })
            }
            return data
        }
    }
    
    

    更多生成模拟数据的规则可看https://github.com/nuysoft/Mock

    生成代码

    确保之前npm run start的窗口还开着,打开新的命令行窗口,执行npm run code

    image

    复制 src/routes/bookApiMap.txt 某一行数据到 Postman 访问

    get http://localhost:3000/book/get?id=
    
    get http://localhost:3000/book/paged?pageIndex=&pageSize=&sortBy=&descending=&id=&name=&author=&press=
    
    delete http://localhost:3000/book/del?id=
    
    delete http://localhost:3000/book/batchdel?ids=[]
    
    //不设置 id 则新增,否则为更新
    post http://localhost:3000/book/save
    {
    
      "id":"",
    
      "name":"",
    
      "author":"",
    
      "press":"",
     
    }
    

    image

    请求头记得加上 Authorization:Bearer token

    token 之前模拟登录获取的

    image

    More

    修改自动生成的代码格式

    直接修改 codeGenerate/serverTemplates 下文件

    去掉接口需要授权访问的限制

    去掉 scr/app.js 里的.use(jwt({ secret: publicKey }).unless({ path: [/^\/public|\/auth\/login|\/assets/] }))

    修改接口返回格式

    修改 src/lib/responseTemplate.js

    修改路由

    修改 src/routes 下文件

    添加更多业务逻辑

    主要修改 src/services 下文件,具体可参考memuService.js

    使用权限控制逻辑

    前端参考vue-quasar-admin。实现了页面(菜单),接口,元素级的权限控制。

    后端在路由处加上权限控制的中间件,比如

    .get('/function/pagedlist', PermissionCheck({ permission: ["function_view"], role: ["test"] }), controllers.function.getFunctionPagedList)
    

    permission 表明当前登录用户必须具备数组里的任意一个权限码,才能访问当前接口。

    role 表明当前登录用户必须具备数组里的任意一个角色码,才能访问当前接口

    permission 与 role 为或关系

    3 条回复    2018-07-02 18:05:15 +08:00
    jerrry
        1
    jerrry  
       2018-07-01 02:02:51 +08:00 via Android
    mark
    zhifengmuyu
        2
    zhifengmuyu  
       2018-07-02 16:29:50 +08:00 via iPhone
    Mark
    nezumi85757
        3
    nezumi85757  
       2018-07-02 18:05:14 +08:00
    mark
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1024 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 19:25 · PVG 03:25 · LAX 11:25 · JFK 14:25
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.