龙空技术网

Openwrt之web开发

月出舒窈 75

前言:

此刻朋友们对“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