Skip to content

Latest commit

 

History

History
191 lines (146 loc) · 5.43 KB

configuration.md

File metadata and controls

191 lines (146 loc) · 5.43 KB

修改应用监听端口

修改src/config.js文件

生成mock数据

配置templates/config/model.js

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
    }

生成代码的时候会执行buildMockData,将生成的mock数据填充到对应db.json文件。

默认使用mockjs,更多规则可查看其文档。也可以自行安装faker.js使用

修改接口名称

  • 修改模板

修改templates/server/route.njk代码模板,后续生成代码就会以新的模板来生成。

  • 直接修改

找到对应的路由文件(src/routes下,路由文件名称会以实体名称生成),直接修改即可。

授权配置

默认需要授权访问,请求的时候请求头需要带上 token

  • 完全去掉授权限制

src/app.js找到下行代码

.use(jwt({ secret: publicKey }).unless({ path: [/^\/public|\/auth\/login|\/assets/] }))

直接去掉即可。

完全去掉授权限制 权限控制功能也会失效

  • 部分接口去掉授权显示

还是上面那行代码,根据规则修改

{ path: [/^\/public|\/auth\/login|\/assets/] }

修改数据返回格式

修改src/lib/responseTemplate.js

export let businessError = (ctx,msg) => {
    ctx.body = {
        statusCode: 500,
        msg: msg,
        data: null
    }
}

export let success = (ctx,data) => {
    ctx.body = {
        statusCode: 200,
        msg: '',
        data: data
    }
}

配置接口访问权限

使用已经实现的RBAC权限控制,可以实现接口的访问权限控制。

假如某个接口只允许特定的角色或具备特定权限的人访问,需要修改对应接口的路由配置,比如

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

使用中间件PermissionCheck做权限校验,如果当前用户没有登录,或者不具备function_view权限并且不属于test角色,访问此接口的时候会返回相应的错误信息。

permission为功能编码,role为角色编码,如果用户属于admin则不做校验

添加业务逻辑

如果简单的增删改查不能满足你的要求。你可以自行修改代码,添加你需要的功能。

首先需要了解一下整个应用的结构及调用过程。

  • src\routes

生成代码时会在该文件夹下生成相应的路由文件,比如bookRoute.js

路由配置里,每个接口被访问的时候,会调用对应controller的方法

.post('/auth/login', controllers.auth.login)

比如登陆的时候,调用auth控制器的login方法

  • src\controllers

生成代码时会在该文件夹下生成相应的控制器文件,比如book.js

控制器里会引入相应的实体的服务,也可引入多个实体的服务

import menuService from '../services/memuService'
import roleService from '../services/roleService'

调用服务里的方法来完成某些功能需求,比如

export let getMenuFunctions = async (ctx) => {
    let menuId = ctx.query.menuId
    let roleId = ctx.query.roleId
    let [menuFunctions, roleFunctions] =
        await Promise.all([menuService.getMenuFunctions(menuId), roleService.getRoleFunctions(roleId)])
    return responseTemplate.success(ctx, {
        menuFunctions: menuFunctions,
        roleFunctions: roleFunctions
    })
}
  • src\services

生成代码时会在该文件夹下生成相应的服务文件,比如bookService.js。 服务里会引入相应的model,也可以引入其它服务

import model from '../models/baseModel'
import roleService from './roleService'
import functionService from './functionService'
  • src\models

生成代码时会在该文件夹下生成相应的model,比如bookModel.js。 model里就是使用lowdb读取相应的db.json文件,提供获取lowdb实例的方法

import path from 'path'

const low = require('lowdb')
const lodashId = require('lodash-id')
const FileAsync = require('lowdb/adapters/FileAsync')
const dbFile = path.join(__dirname, '../db/book_db.json')
const adapter = new FileAsync(dbFile)
let instance = undefined
module.exports = {
    init: function (context) {
        return new Promise((resolve, reject) => {
            if (instance === undefined) {
                low(adapter).then(db => {
                    db._.mixin(lodashId)
                    instance = db;
                    resolve(db.get(context))
                })
            } else {
                resolve(instance.get(context))
            }
        })
    },
    read: () => {
        return new Promise((resolve, reject) => {
            if (instance === undefined) {
                resolve()
            }
            else {
                instance.read().then(() => {
                    resolve()
                })
            }
        })
    }

}
  • src\db

生成代码时会在该文件夹下生成相应的JSON文件,比如book_db.json

json文件的作用就是持久化数据。

到此,相信你已经知道如何去修改或添加代码来实现你要的功能。