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 声明为 strUserId
或 intUserId
,能通过变量命名理解变量的含义和类型,也防止跟预定义变量冲突。