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服务器取模板,插件模拟用户登陆请求等。

  • 相关阅读:
    【故障处理】ORA-12162: TNS:net service name is incorrectly specified (转)
    android studio 编程中用到的快捷键
    java时间格式串
    android Error occurred during initialization of VM Could not reserve enough space for object heap Could not create the Java virtual machine.
    linux安装vmware
    x1c 2017 安装mint18的坑——grub2
    x1c2017 8G版 win linux的取舍纠结记录
    python的try finally (还真不简单)
    kafka+docker+python
    json文件不能有注释
  • 原文地址:https://www.cnblogs.com/demix/p/2171803.html
Copyright © 2011-2022 走看看