当前位置: 首页 > 后端技术 > Node.js

一个简单的模拟服务器解决方案

时间:2023-04-03 11:03:04 Node.js

json-server-routerjson-server-router的作用是提供一种简洁的方式来构建具有任意路由的模拟服务器。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-routerusagejson-server的实现思路是根据目录结构构造出想要的接口形式。假设我们的目标接口是/aaa/bbb/ccc/update,那么我们只需要在遇到名为index的文件路径时构造如下目录结构,在拼接的时候会忽略index,index-aaa-bbb+ccc.json当key值为index路径拼接时也会被忽略//addupdateorinccc.json-aaa-bbb-ccc+index.json//在addinganupdateroutetoindex.json生成示意图如下,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}installation&使用当前的全局安装,你会得到一个名为jsr的全局命令。根据前面的介绍,此时你只需要创建一个包含mock文件的根目录即可。$npminstalljson-server-router-g$jsr--rootmock命令参数jsr[options]OptionsRequired:--root,-rPathstomockfilesparentdir[string][required]Options:--configPathtoJSON配置文件[string][default:jsr.config.js]--port,-p设置端口[number][default:3000]--host[string][default:"localip"]--static设置静态文件目录(与json-server相同)[string][default:"public"]--watch,-w监视文件[boolean][default:false]--open,-oopen[boolean][default:false]--middlewares,-m中间件文件的路径TODO[array]--help,-h显示帮助[boolean]--version,-v显示versionnumber[boolean]例子:jsr--rootmockjsr--rootmock--port3000参数说明config设置配置文件默认配置文件的地址为当前目录下的jsr.config.jsstaticstatic的地址resource和json-服务器是一样的。需要注意的是,如果静态路径存在,json-server-router会自动创建一个包含所有路由的index.html。如果static目录不存在,则不会自动创建目录生成index.htmlwatch监听文件变化自动reloadjsr.config.jssimplemodule.exports={root:'mock',port:3000,}GETjson-server-router其底层依赖json-server搭建,所以也具备json-server所有GET请求相关的功能在使用json-server时,我们可以通过搭建routes/get/users?_page=7&_limit=进行分页查询10、但查询的关键字必须它是指定的。在json-server-router中,可以自定义jsr.config.js中的queryMap字段来修改关键字的名称。配置完成后,可以通过/get/users?page=7&len=10//jsr.config.js进行分页查询{queryMap:[['_page','page'],['_limit','len']]}POSTPUTDELETE对于非GET请求不需要定义mock文件,json-server-router统一处理所有非GET请求,不管路由是什么,都通过handler函数进行处理。可以通过重写jsr.config.js中的handler函数来自定义处理结果//jsr.config.js{/***处理所有非GET请求*当查询fial有值时,认为该请求是设置为失败状态*/handler(req,res,next){const{ip,originalUrl,body}=reqconstisFail=!!req.query.failres.json({code:isFail?500:200,message:isFail?'failed':'succeed',cookie:req.get('cookie'),ip,url:originalUrl,body:body})}}提示当jsr运行后,在命令窗口输入rs重新加载.当静态路径存在时,routing/jsr会返回所有的路由信息??。当静态路径不存在时,routing/jsr会返回所有的路由信息??。参战者可以作为json-server中间件参考文件,参考cli/server.jsconstjsonServer=require("json-server")constserver=jsonServer.create()constmiddlewares=jsonServer.defaults()//{static:'public'}constJsonServerRouter=require("json-server-router")/***@prop{string}rootmock文件根目录默认为'mock'*@prop{number}port端口号与json-server一致默认为3000*@prop{string}publicPath生成默认主页地址,与json-server配置一致,默认为'public'。如果修改了路径,json-server对应的配置也要改*@prop{bool}open是否使用浏览器打开,默认true*/constrouter=newJsonServerRouter({root:"mock",port:3000,publicPath:"public"})server.use(middlewares)server.use(router.routes())server.use(router.rewrite())server.listen(3000,()=>{console.log("JSON服务器正在运行")})