前言:
此刻朋友们对“openwrtjs”可能比较珍视,咱们都需要剖析一些“openwrtjs”的相关文章。那么小编在网上收集了一些关于“openwrtjs””的相关文章,希望兄弟们能喜欢,你们快快来了解一下吧!大家都知道openwrt的web页面非常专业,一般用户根本看不懂,所以大部分厂家在拿到openwrt的SDK后,都会对原有web页面进行重构。web重构大家都会选择前后端分享的技术,但是openwrt的老版本却用的MVC的框架,在新版的openwrt中已经抛弃这种MVC的框架了。我这里会基于openwrt 21.02版本介绍几种重构的方法,并比较各自的优缺点。
1. 后端不变,只修改前端样式。在openwrt 21.02中,已经实现了前后端分离,数据来源主要分为ubus和uci命令,并在js中已经对ubus命令进行了封装。所以我们只需要修改前端样式,即可实现新web的开发。
优点:后端不用修改缺点:对于习惯使用vue框架的前端开发人员,要将原生的openwrt页面进行样式修改难度较大,并且在js中嵌入了大量的后端业务逻辑,没有很好的实现页面与数据的分离。
2. 前端使用框架,如VUE,后端去掉model和view,只在controller中,使用entry中的路由方式,实现call函数,所有的数据通过call函数或调ubus命令、或调uci命令,将得到的数据封装为json格式返回给前端。
优点:前端专注渲染,后端专注数据缺点:所有的数据接口后端都需要重新实现一遍,工作量较大。
3. 前端使用框架,如VUE,数据不走cgi-bin,而是使用jsonrpc。在新版本的openwrt中,uhttpd在ubus.c中实现了jsonrpc接口,前端通过调用jsonrpc,uhttpd收到以后调用ubus命令,将得到的数据以json方式返回到前端。请求格式如下:
POST { "jsonrpc": "2.0", "id": 16, "method": "call", "params": [ "a896cbb758eb374ae411c699ff57c848", "system", "info", {} ]}
成功返回如下数据:
{ "jsonrpc": "2.0", "id": 16, "result": [ 0, { "localtime": 1710410486, "uptime": 68340, "load": [ 68960, 67744, 65632 ], "memory": { "total": 236720128, "free": 24875008, "shared": 806912, "buffered": 6291456, "available": 55607296, "cached": 29229056 }, "swap": { "total": 0, "free": 0 } } ]}
优点:ubus命令可以直接使用,包括uci命令,因此如果增加的页面都是uci数据,后端都不用增加开发量,只需要整理ubus接口命令,如果需要新增则在rpcd中增加lua的ubus插件,即可开发少量的自定义页面数据。缺点:返回的数据格式不统一,不同的ubus命令返回的数据格式节点不统一,同时错误码无法统一,uhttpd中有错误码、rpcd中有错误码、自定义的ubus命令检查数据时也会产生错误码,前端识别会比较麻烦。
以上就是web重构的几种思路,根据项目的实际情况选择。
标签: #openwrtjs