javascript
> 文档中心 > 文档中心 > INFINI Gateway > 功能手册 > 在线过滤器 > javascript

javascript #

描述 #

javascript 过滤器可用于通过用 javascript 编写脚本来执行您自己的处理逻辑,从而提供最大的灵活性。

配置示例 #

一个简单的示例如下:

flow:
 - name: test
   filter:
    - javascript:
        source: >
          function process(ctx) {
            var console = require('console');
            console.log("hello from javascript");
          }

这个脚本里面的 process 是一个内置的函数,用来处理传进来的上下文信息,函数里面可以自定义业务逻辑。

如果脚本比较复杂,也支持通过文件的方式从加载:

flow:
 - name: test
   filter:
    - javascript:
        file: example.js

这里的 example.js 是文件的保存路径。

参数说明 #

名称类型描述
sourcestring要执行的 Javascript 代码。
filestring要加载的脚本文件的路径。相对路径被解释为相对于网关实例数据目录的 scripts 子目录。
paramsmap一个参数字典,传递给脚本的 register 方法。

上下文 API #

传递给处理方法的上下文对象具有以下 API 可以被使用。有关上下文的更多信息,请查看 Request Context

方法描述
Get(string)从上下文中获取一个值。如果字段不存在,则返回 null。 eg: var value = event.Get(key);
Put(string, value)在上下文中输入一个值。如果字段已经设置,则返回以前的值。如果字段存在但不是对象无法设置,则会抛出异常。 eg: var old = event.Put(key, value);
Rename(string, string)在上下文中重命名一个字段。目标键必须不存在。如果成功地将源键重命名为目标键,则返回 true。 eg: var success = event.Rename("source", "target");
Delete(string)从上下文中删除一个字段。成功时返回 true。 eg: var deleted = event.Delete("user.email");
Tag(string)如果 Tag 不存在,则将 Tag 追加到 Tag 字段。如果 Tag 存在但不是字符串或字符串列表,则抛出异常。 eg: event.Tag("user_event");
AppendTo(string, string)一个专门的追加字段值的方法,它将现有值转换为数组,并在值不存在时追加该值。如果现有值不是字符串或字符串数组,则抛出异常。 eg: event.AppendTo("error.message", "invalid file hash");

外部参数的使用 #

下面的例子,介绍了如何使用 params 来传递变量,脚本可以加载来自文件,方便复用程序脚本。

flow:
 - name: test
   filter:
    - javascript:
        params:
          keyword: [ "hello", "world", "scripts" ]
        source: >
          var console = require('console');
          var params = {keyword: []};
          function register(scriptParams) {
              params = scriptParams;
          }
          function process(ctx) {
            console.info("keyword comes from params: [%s]", params.keyword);
          }

register 是一个内置的函数,用来初始化外部参数。