1.前端自动生成mock数据
2.Webå端å¼å主è¦å¦åªäºè¯¾ç¨ï¼
3.C++开源http服务框架WHttpServer
前端自动生成mock数据
在当前的源码前后端分离开发模式中,为了提高工作效率,源码我们可以在后端开发完成之前,源码使用mock数据来进行前端的源码交互开发和bug排查。以下是源码一些常用的mock数据方式:
1. 创建一个json文件,例如使用json-server等工具。源码台服dnf辅助源码
2. 使用mock.js配合koa等node服务器框架。源码
今天,源码我要向大家推荐一个开源框架——easy-mock。源码它可以根据swagger文档自动生成前端mock数据,源码内置了mock.js(前提是源码后端引入swagger)。使用它非常方便,源码无需再手动编写mock代码。源码
1. 工作环境
node -..3
easy-mock -last
mongodb -4.2.8
redis 源码-6.0.6
2. 项目构建
在使用easy-mock之前,需要安装mongodb和redis。源码这里我们使用homebrew工具安装(适用于mac或Linux的安装包管理器)。官网链接。武侠网游源码
安装homebrew的指令如下:
1. 安装redis(macOS为例),执行以下指令:
安装完成后,执行redis-server指令,另起一个终端,执行redis-cli,出现如下画面代表安装完成。
2. 安装mongodb,由于mongodb已不再开源,直接运行brew install mongodb会报错,找不到,所以执行以下指令。
执行指令mongod,运行mongodb,新建一个终端执行指令mongo链接,能连接成功即可。
3. 从github上clone easy-mock。内存测量源码
打开config/default.json,将你的mongodb地址配置进去。查看代码得知,项目使用的是mongoose,如果指定用户请将db选项按照如下配置:(user:password替换为你自己mongodb的账户密码,@后面为MongoDB链接地址)
(请先启动mongodb和redis哦)然后执行指令,就可以运行起来了。
到这里,你的easy-mock就简单地搭建好了,更多配置请见官网。
3. 使用指南
启动服务后,注册账号并登录,然后点击我的项目,新建项目,填写项目信息,点击创建即可创建一个项目。linux源码图解
创建完项目后,去获取更新。
官网有详细的使用教程,地址。
到这里,基本上已经大功告成了。在你的项目中,将路由转发到上图中的baseurl就可以使用了。
4. 源码改进
easy-mock内置了mock.js,但是mock.js内置的一些数据仓库,会和世纪项目中的不匹配(比如:省市区数据,我们项目中是使用code来进行前后端数据传输的。),这里就需要对mock.js源码进行一些修改:
1. 把mock.js从github上clone下来,
2. 找到src/mock/random目录,将里面的redis源码框架address_customer.js内容替换为你们自己的省市区数据。
3. 修改同目录下的address.js修改生成部分实现。
4. 执行打包指令。生成mock.min.js
5. 打开easy-mock的plugin目录,将生成的mock.min.js复制进去。
6. 打开easy-mock的controllers目录,修改里面的mock.js文件,将Mock的引入修改为本地,(还有utils/swagger.js文件也要修改)重启easy-mock即可。
easy-mock的swagger解析器,因为官方考虑到对象交叉引用,可能会陷入死循环。所以部分接口可能同步不出来。文档地址
1. clone解析器swagger-parser-mock项目的lib目录,放到easy-mock的plugin目录下。
2. 修改解析器的index.js如下:
修改easy-mock的util/swagger.js将swaggerParserMock的引入改为本地
增加swagger文档的标签筛选功能,查看接口更加便利,项目视图部分的实现使用的是vue和ivew,
1. 打开util/swagger.js,添加tags的存储。
2. 修改models/fields_table.js,添加tags
3. 修改models/mock.js,添加tags
4. 修改proxy/mock.js,添加tags
5. 最后在views/pages/project-detail/index.vue中,给表格添加一列tags展示,并且提供筛选。这里就不再展示了。
5. 参考文章
1. brew安装mongodb报错
2. easy-mock官网
3. mock.js官网
4. swagger规范
Webå端å¼å主è¦å¦åªäºè¯¾ç¨ï¼
èå®è¯´ï¼å端ç»è¿è¿å å¹´çå¿«éåå±ï¼ç½ä¸çæç« åæç¨è¿æ¯è®å¤çï¼æç»éªç人è½å¤æ ¹æ®èµæå¶å®åºå±äºèªå·±çå¦ä¹ æ¹æ³åè·¯å¾ï¼ä½å¯¹äºå°ç½æ¥è¯´ï¼è¿æ¯æäºé¾åº¦ãç¥äºå§æ¥ç»å¤§å®¶å享å端å¦ä¹ è·¯å¾ãé对0åºç¡ï¼éç§çï¼æ²¡æç¼ç¨ç»éªï¼æ³å¦å端ï¼ä½æ¯ä¸ç¥éå¦ä½å ¥é¨ç人群ãåºç¡é¨åï¼
1ãHTML + CSS è¿é¨åå¦ä¹ ï¼å¯ä»¥æ¨¡ä»¿ä¸äºç½ç«åäºé¡µé¢ï¼å¨å®è·µä¸ç§¯ç´¯ç»éªãåå°è½ä¸UI对æ¥ï¼è½%éæç½ç«éæ页é¢çå¼åï¼ä¸ºåæç¼å页é¢é»è¾ãå¨ææææåºç¡ã
2ãJavascript è¦å¦çå 容å®å¨å¾å¤ï¼å¦æ没æå ¶ä»ç¼ç¨è¯è¨çåºç¡çè¯ï¼å¦èµ·æ¥å¯è½è¦è´¹äºåï¼è¿ä¸ªé¶æ®µéè¦ææ¡ç¼ç¨åºç¡æ¦å¿µï¼å¹å »é»è¾æç»´è½åãè½å¤ç¬ç«å®æç½ç«ç页é¢å¼åï¼å æ¬åçå¸å±ï¼JavaScriptæä½DOMï¼
è¿é¶é¨åï¼
æäºä»¥ä¸åºç¡ï¼å°±å¯ä»¥è¿è¡ä¸è¬çéæç½é¡µè®¾è®¡ï¼ä¸è¿å¯¹äºå¤æç页é¢è¿éè¦è¿ä¸æ¥å¦ä¹ ã
3ãJavaScripté«çº§ä¸æå¡å¨åºç¡ï¼æ·±å ¥é¢å对象ç¼ç¨ï¼å ·å¤ç§»å¨ç«¯å¼åè½åï¼å¤çæµè§å ¼å®¹é®é¢ï¼æ·±å ¥å¦ä¹ ES6/ES7è¯æ³è§èï¼åå端å离å¼åææ³ã
4ãæ¡æ¶ä¸æå¡å¨ï¼æ°æ®åºï¼å端å®å ¨çå¦ä¹ ï¼æ·±å ¥äºè§£Nodeï¼æ°æ®åºæä½ï¼åå端å离ææ¯ï¼ååå°åä½å¼åãçæNPMï¼Yarnï¼ï¼Node模åfsï¼httpï¼è·¯ç±ï¼å¤ç请æ±ï¼express4ï¼koaï¼ï¼ææ¡å建websocketæå¡ï¼MongoDB/MySQLæ°æ®åºCRUDï¼Mongooseï¼ï¼ææ¡å¾®ä¿¡å°ç¨åºå¼åï¼ææ¡Vue2.xåºç¡ï¼Vue-routerï¼Vuexççã
5ãReactä¸ç»ä»¶åå¼åï¼æ·±å ¥å¦ä¹ ç»ä»¶åå¼åææ³ï¼äºè§£webpack使ç¨ï¼ææ¡Reactå¼ååºç¡ï¼Hookï¼create-react-appççã
å级é¨åï¼
æäºä»¥ä¸ç¥è¯ï¼å¯¹äºå¤§å¤æ°å°åç½ç«ï¼ä½ åºè¯¥å·²ç»å¯ä»¥ååºè½å¤å·¥ä½ç代ç äºãä½è¦æ³æ为æ´ä¸ä¸çå端ï¼ä½ è¿é继ç»åªåãæ´é«çè¦æ±å¤§æ¦è¿æåæ¹é¢ï¼1ï¼æç»´æ¤ï¼2ï¼å¯æµè¯ï¼3ï¼é«æ§è½ï¼4ï¼ä½æµéï¼ç§»å¨ç«¯ï¼ã
å ¶ä»è¡¥å é¨åï¼
å端项ç®åæ ·é¢ä¸´è½¯ä»¶çå½å¨æçå个ç¯èï¼é¦å æ¯ä»£ç 管çï¼ä½ å¿ é¡»å¦ä¼ä½¿ç¨SvnåGitãå ¶æ¬¡æ¯ä»£ç çæ建ï¼å¦ä»å端代ç æ建已ç»ä¸æ¯ç®åçå缩ä¸ä¸äºï¼éè¦è¿è¡ä¾èµç®¡çã模åå并ãåç§ç¼è¯ï¼æ¯éè¦å¦ä¼ä½¿ç¨GruntãGulpçå端æå»ºå·¥å ·ã
以ä¸å 容åªæ¯ç®å说äºå端å¦ä¹ ç顺åºã对äºå端å¼åï¼åºæ¬å 容就è¿äºäºï¼å¯ä»¥æ ¹æ®èªå·±çå ´è¶£ç±å¥½éæ©æ§å¦ä¹ 以ä¸å 容ã
1ã交äºè®¾è®¡ãå¤§å ¬å¸ä¾ç¶æä¸ä¸äººå£«æè¿äºï¼ä¸è¿ä¸æ交äºçå端ä¸å®ä¸æ¯å¥½å端ãæ¨èãç®çº¦è³ä¸ãã
2ãå端ãåºè¯¥è¯´å端工ç¨å¸å¿ é¡»è³å°äºè§£ä¸é¨å端è¯è¨ï¼ä¸è¿å¦æç±å¥½ä¹å¯æ·±å ¥å¦ä¹ ï¼å¦ä»NodeJså¨å¤§å ¬å¸å·²ç»å¾å°æ®éç使ç¨ï¼æ¨è大家使ç¨å¨Nodeä¸ä½¿ç¨Expressæ¡æ¶åä¸äºå端æå¡çå¼åã
æåï¼æç»éªçç¨åºåé½ç¥éï¼å¦ä¹ ç¼ç¨æææççæ¹å¼å°±æ¯æä½ æå°ä¸ä¸ªé¡¹ç®ç»ï¼è¿æ»å¸¦ç¬çåä¸ä¸¤ä¸ªé¡¹ç®ä¸æ¥ä½ 马ä¸ä¼åç°ææçç¥è¯ç¹å ¨é½è¿å°ä¸èµ·äºï¼ä¸åæ¯åæ£çï¼èæ¯å½¢æä¸ä¸ªæ´ä½äºãé£ç§æè§æ¯ä» ä» æ·±å ¥é»ç ç¥è¯ç¹èä¸åçå®é¡¹ç®ç人æä¸è½ä½ä¼çã ä¸ä¸ªé¡¹ç®å°±æ¯ä¸æ ¹ç»³åå¯ä»¥æ大ççç¥è¯ä¸²å°ä¸èµ·ã
å¦ææ³é»ç¼å®é å¼åçè½åèä¸ä» ä» æ¯è诵æè äºè§£ä¸äºç¥è¯ç¹ï¼å¦ææ³æ为çæ£ç好æï¼é£ä¹ï¼è¿æ¯å项ç®å§ï¼
æ´ä½æ¥ççè¯ï¼Webå端å¼åéè¦å¦ä¹ çå 容è¿æ¯æ¯è¾å¤çãå端æ¯ä¸é¨æ¶µçé¢å¾å¹¿çå¦ç§ï¼èä¸ææ¯æ´æ°è¾å¿«ï¼ä¼ç§çWebå端å¼åå·¥ç¨å¸åºè¯¥å ·å¤å¿«éå¦ä¹ è½åãå¦æ没æå¿«éå¦ä¹ è½åï¼å°±è·ä¸ä¸Webåå±çæ¥ä¼ï¼æ以éè¦ä¸ææåèªå·±ï¼ä¸æå¦ä¹ æ°ææ¯ãæ°æ¨¡å¼ã
C++开源http服务框架WHttpServer
介绍 基于mongoose 7.3版本的源码,经过二次封装和修改,WHttpServer是一个高性能的C++开源HTTP服务框架。该框架支持Linux操作系统,macOS系统下需要自行适配库,暂时未验证在Windows系统下的运行情况。用户可以通过查看示例文件(HttpExample.cpp、HttpExample.h和main.cpp)来了解如何在普通接口、大文件上传、大文件下载、chunk流文件下载等场景中使用。 运行操作系统 WHttpServer适用于Linux操作系统。在macOS系统上可以运行,但需要修改CMakeLists.txt文件以适配openssl库。Windows系统理论上可以运行,但因无测试支持,暂不推荐。 安装教程 将whttp-server-core目录下的文件复制到您的项目中即可完成安装。 接口说明 以下是WHttpServer提供的接口及其功能: bool init(int maxEventThreadNum): 初始化线程池,设置最大线程数。 bool startHttp(int port): 开启HTTP服务,指定端口号。 bool startHttps(int port, string certPath, string keyPath): 开启HTTPS服务,指定端口号和证书路径。 bool stop(): 停止HTTP和HTTPS服务。 bool run(): 服务运行的核心函数,需要外部循环调用。 bool isRunning(): 检查服务是否正在运行。 void addHttpApi(const string &uri, HttpCbFun fun, int httpMethods): 添加普通的HTTP回调接口,通过不同的httpMethods设置HTTP方法。 void addChunkHttpApi(const string &uri, HttpCbFun fun, int httpMethods): 为可能超过3M大小的文件上传场景添加数据块HTTP回调接口。 void setHttpFilter(HttpFilterFun filter): 设置HTTP接口的过滤函数,用于过滤不符合条件的请求。 void forceCloseHttpConnection(shared_ptr httpMsg): 强制关闭与客户端的连接。 void addSendMsgToQueue(shared_ptr httpMsg, const char* data, int len): 向客户端发送数据,先放入缓冲区,等待下次循环发送。 void addSendMsgToQueue(shared_ptr httpMsg, string *sendMsg): 与上一个函数的字符串版本。 void httpReplyJson(shared_ptr httpMsg, int httpCode, string head, string body): 向客户端发送JSON格式的响应。 string formJsonBody(int code, string message): 生成JSON字符串。 bool isClientDisconnect(shared_ptr httpMsg): 检查客户端是否主动断开连接。 shared_ptr deQueueHttpChunk(shared_ptr httpMsg): 处理大文件上传时的块数据。 bool addStaticWebDir(const string &dir, const string &header = ""): 添加静态网页目录接口。 mg_http_status_code_str(int status_code): 返回HTTP状态码对应的字符串。 重要数据类型 提供以下两个数据类型: using HttpCbFun = std::function &);: HTTP接口回调函数的类型。 using HttpFilterFun = std::function &): HTTP接口过滤函数的类型。 注意事项 所有HTTP回调函数在子线程中运行,同一回调可能在不同线程中运行,注意线程安全。 run函数内部未加锁,非线程安全,初始化和启动服务的函数调用应在run之前。 添加HTTP接口时,uri应避免重复匹配,否则只执行最后一个匹配的接口。建议直接使用'/'作为uri开头。 示例代码 初始化代码示例。 在main函数中启动服务的示例代码。 HTTP接口回调的示例代码。