zoukankan      html  css  js  c++  java
  • [PyJs系列介绍]四、代理与插件

    这篇主要讲js之外的PyJs扩展功能。

    首先要讲PyJs另外一个设计原则:

    系统不集成过多功能,专注于实现其的核心价值。附属功能,应该使用插件或其他的形式附加上去。

    一个系统如果实现了过多的功能,满足了过多的需求,就会导致系统过于庞大。一方面可维护性降低,另外一方面新人入门的门槛也会增加。独立系统负责独立功能,各系统通过特殊的方式能组合在一起,这样的系统应该是更完美的。

    PyJs的核心价值就是基于commonjs语法的本地js调试及上线打包的实现。我不希望其他任何平台级别的功能加入到这个系统里,但是很多时候我们的本地调试又会需要一些增强的功能,我们在PyJs中是以代理及插件的方式来实现这个增强。

    Server.json

    PyJs根目录下可以有一名为server.json的文件。json的内容标志了服务器的代理及插件的规则。 json中的key代表了url的匹配规则,可以为字符串或正则表达式。json中的value根据前缀不同分别作为代理或插件存在。

    代理

    代理的server.json中可以声明如下:

    {
            "baidu":"http://www.baidu.com"
    }


    意为对于所有url中含有baidu的请求,全部抓取 http://www.baidu.com 的内容返回。

    使用场景:本地ajax模拟

    插件

    server.json中还可以做一下声明:


    {
            "baidu":"http://www.baidu.com",
            "combo":"plugins.combo"

    } 

    json中一切以plugins开头的值将被当作插件,映射到相应plugins目录下的.py文件,这里的combo请求将映射到plugins/combo.py里。

    所有的plugins的py文件都需要定义一个main函数,接受一个参数,将会传入url上的search串。main函数都需要返回一个元组,值分别为响应的content-type和body。如一个最简单的插件可以写作:

    def main(params):

        return ('text/html' , params) 


    使用场景:更复杂的代理(如需要用户权限认证的);更复杂的动态请求(如模拟combo) 

    通过代理和插件,我们基本可以完成前端的所有日常开发,如代理重定向到php服务器取模板,插件模拟用户登陆请求等。

  • 相关阅读:
    echarts 图表缩放 X轴Y轴数据缩放
    avue大屏 avuedata echarts图形数据过多自动滚动
    地图自定义弹窗 高德地图信息窗体 鼠标点击地图点标记显示弹窗html
    地图自定义弹窗 高德地图信息窗体 鼠标点击地图点标记显示弹窗vue
    自动刷新页面的实现方法总结
    vs2008 切换到试图代码后自动关闭问题
    时间差值
    Array.prototype.slice() 方法
    Array.prototype.slice.call()详解及转换数组的方法
    [UNIX网络编程1.0]源代码在linux系统下的实现
  • 原文地址:https://www.cnblogs.com/demix/p/2171803.html
Copyright © 2011-2022 走看看