java mock server_一个简单mock-server 解决方案

json-server-router 的作用是提供一个简明的方式构建出拥有任意的路由的 mock server

json-server-router 要解决的问题

在使用 json-server 时你写了如下文件(db.json) 也就代表你得到了四个 mock 接口

/update ,/retrieve, /create ,/delete

但是实际的需求中接口路由肯定不能这么简单你需要的可能是 /aaa/bbb/ccc/update这样的形式,虽然json-server可以配置rewrite可以解决部分问题,但是这并不简单,接下来我们来看一下json-server-router的方式

// db.json

{

"update": { "code": 200, "message": "succeed", "data": true },

"retrieve": { "code": 200, "message": "succeed", "data": true },

"create": { "code": 200, "message": "succeed", "data": true },

"delete": { "code": 200, "message": "succeed", "data": true }

}

json-server-router 使用方式

json-server-router 的实现理念是根据目录结构,构建出想要的接口形式

假设我们的目标接口为 /aaa/bbb/ccc/update

那么我们只需构件出如下的目录结构

当遇到名称为 index 的文件路径拼接的时候会忽略index,当遇见键值为 index路径拼接同样也会忽略index

- aaa

- bbb

+ ccc.json // 在ccc.json中添加 update

or

- aaa

- bbb

- ccc

+index.json // 在index.json中添加update

路由生成示意大概下面这个样子,mock为 mock 文件的根目录

mock/books/index.json

-mock

+ index.json ------> /xxx

+ book.json ------> /book/xxx

- foo

+ index.json ------> /foo/xxx

+ bar.json ------> /foo/bar/xxx

假设/books/index.json内容如下

将对应生成四个接口 /books/ /books/retrieve /books/create /books/delete

{

"index": { "code": 200, "message": "succeed", "data": true }, // /books/

"retrieve": { "code": 200, "message": "succeed", "data": true },// /books/retrieve

"create": { "code": 200, "message": "succeed", "data": true },// /books/create

"delete": { "code": 200, "message": "succeed", "data": true }// /books/delete

}

安装&使用

当前全局安装之后你会得到一个叫jsr的全局命令,根据前面的介绍这时候其实你只需构件出一个包含mock files 的根目录就足够了

$ npm install json-server-router -g

$ jsr --root mock

命令参数

jsr [options]

Options Required:

--root, -r Paths to mock files parent dir [string] [required]

Options:

--config Path to JSON config file [string] [default:jsr.config.js]

--port, -p Set port [number] [default: 3000]

--host [string] [default: "local ip"]

--static Set static files directory(same as json-server) [string] [default: "public"]

--watch, -w Watch file(s) [boolean] [default: false]

--open, -o open [boolean] [default: false]

--middlewares, -m Paths to middleware files TODO [array]

--help, -h Show help [boolean]

--version, -v Show version number [boolean]

Examples:

jsr --root mock

jsr --root mock --port 3000

参数说明

config 设置配置文件默认配置文件的地址是当前目录的下的jsr.config.js

static 静态资源的地址跟json-server是一致的,需要注意的是如果 static路径存在的话json-server-router会自动创建一个包含所有路由的index.html,如果static目录不存在,不会自动创建目录生成index.html

watch 监控文件变化自动重新加载

jsr.config.js simple

module.exports = {

root: 'mock',

port: 3000,

}

GET

json-server-router其底层依赖json-server所构建,所以在不出意外的情况下同时也拥有json-server的所有GET请求相关功能

当使用json-server 我们可以通过构建路由/get/users?_page=7&_limit=10进行分页查询但是query的关键词必须是指定的

在json-server-router中可以再jsr.config.js中自定义queryMap字段来修改关键词的名字,配置好了之后就可以通过/get/users?page=7&len=10进行分页查询

//jsr.config.js

{

queryMap: [['_page', 'page'], ['_limit', 'len']]

}

POST PUT DELETE

关于非GET请求你不需要定义mock files,json-server-router对所有非GET请求进行统一处理不管其路由是什么一致通过handler函数处理

你可以通过重写jsr.config.js中的handler 函数自定义其处理结果

//jsr.config.js

{

/**

* 处理所有非GET请求

* 当query fial 有值的时候认为请求设置为失败状态

*/

handler (req, res, next) {

const { ip, originalUrl, body } = req

const isFail = !!req.query.fail

res.json({

code: isFail ? 500 : 200,

message: isFail ? 'failed' : 'succeed',

cookie: req.get('cookie'),

ip,

url: originalUrl,

body: body

})

}

}

tips

当jsr运行起来之后在命令窗口键入rs会重新加载

当static路径存在的时候,路由/jsr 会返回所有路由信息,当static路径不存在的时候路由/会返回所有路由信息

战斗人员可以作为json-server中间件引用

可以参考cli/server.js

const jsonServer = require("json-server")

const server = jsonServer.create()

const middlewares = jsonServer.defaults() // { static: 'public' }

const JsonServerRouter = require("json-server-router")

/**

* @prop {string} root mock文件根目录默认为 'mock'

* @prop {number} port 端口号跟json-server 一致 默认为 3000

* @prop {string} publicPath 生成默认首页的地址,跟json-server 配置一致 默认'public',如果修改路径的话那么json-server 对应的配置也要改

* @prop {bool} open 是否用浏览器打开 默认 true

*/

const router = new JsonServerRouter({

root: "mock",

port: 3000,

publicPath: "public"

})

server.use(middlewares)

server.use(router.routes())

server.use(router.rewrite())

server.listen(3000, () => {

console.log("JSON Server is running")

})

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值