跳到主要内容

globalThis 全局对象

globalThis 是全局对象,提供可在任何地方使用的变量。

globalThis 被作为全局对象的标准名称加入到了 JavaScript 中,Luwak JavaScript 引擎支持该名称。

预定义属性

Luwak 为每个请求创建一个 globalThis 全局对象,在脚本中修改后会全局生效。

{
// 公共参数
metas: {
apiName: string // API 名称
clientIp: string // 客户端 IP 地址

token: string // 会话令牌
timestamp: number | string // 时间戳
}

requestHeaders: {
[key: string]: string // HTTP Request Headers
}
responseHeaders: {
[key: string]: string // HTTP Response Headers
}

// input: {
// data: any // API 请求提交的业务数据
// idList?: [] // updateByIdList 的 id 列表
//
// filters?: [] // 过滤条件
// sorters?: [] // 排序
// pagination?: { current: number, pageSize: number } // 分页对象
// }

// API 请求参数
input: any;

// API 响应结果
output: any;

// 服务端保存的会话信息,由引擎根据 token 读取并初始化
session: object

// 环境变量,由引擎从配置文件中读取并初始化
env: object
}

何时使用

  • 每个脚本的运行环境是隔离的,globalThis 用于跨脚本共享数据。
  • 获取请求参数
  • 获取会话数据
  • 获取环境变量
  • 前面的脚本保存中间结果,提供给后面的脚本使用
  • 获取零代码或 Main Code 脚本返回的 API响应结果,并对结果做修改

代码示例

脚本1 添加自定义属性

script-1
// 保存中间结果
globalThis.gName = "luwak";
globalThis.gAge = 1;

脚本2 修改和追加

script-2
// 修改上面脚本的结果
globalThis.gAge = 2;
// 保存中间结果
globalThis.gDescription = "database middleware";

脚本3 在 globalThis 中可访问以下属性

json
{
"gName": "luwak",
"gAge": 2,
"gDescription": "database middleware"
}

访问预定义变量

// ---- ES5 写法 ----
// 业务参数
var data = globalThis.input;
// 会话数据
var session = globalThis.session;

// ---- ES6 写法 ----
var { input: data, session } = globalThis;

// ... 使用 data 或 session 变量
注意

推荐自定义的变量使用前缀以避免和预定义变量冲突。

例如统一加上类型前缀 obj(对象), arr(数组), str(字符串), int(整数), float(浮点数), is(布尔值) 或统一加上单位后缀 ms(毫秒)等。

例如用户 ID 声明为 strUserIdintUserId,能通过变量命名理解变量的含义和类型,也防止跟预定义变量冲突。