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
是文件的保存路径。
参数说明 #
名称 | 类型 | 描述 |
---|---|---|
source | string | 要执行的 Javascript 代码。 |
file | string | 要加载的脚本文件的路径。相对路径被解释为相对于网关实例数据目录的 scripts 子目录。 |
params | map | 一个参数字典,传递给脚本的 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
是一个内置的函数,用来初始化外部参数。