mc.context 上下文机制
更新时间:2025/06/27
在Gitcode上查看源码

在涉及接口操作时,通常使用上下文传递本次调用的相关信息。mc.context提供了一套完整的上下文体系,通常在北向接口生成上下文并向下传递,过程中的组件能随时获取到当前上下文,并利用其获取接口交互数据,用于记录操作日志、鉴权等。

加载方式

lua
local ctx = require 'mc.context'

接口说明

context.new

描述

  • 创建上下文

参数

参数名类型描述是否必选
interfacestring接口信息可选
usernamestring用户信息可选
client_addrstringIP地址可选

返回

  • 上下文对象

异常

示例

lua
local context = require 'mc.context'
local ctx = context.new('IT', 'Admin', '127.0.0.1')

context.get_context

描述

  • 获取上下文

参数

参数类型描述是否必选
cothread协程id可选

返回

  • 返回对应协程的上下文,co为nil时,默认获取当前上下文,返回值类型为table。若当前上下文为空,返回nil

异常

示例

lua
local context = require 'mc.context'
local ctx = context.get_context(co) -- 带参数
local ctx1 = context.get_context() -- 不带参数
ctx1.A = B -- 对当前上下文中的字段进行赋值

context.get_context_or_default

描述

  • 获取上下文,无上下文则返回一个默认上下文

参数

参数类型描述是否必选
cothread协程可选

返回

  • 返回对应协程的上下文。co为nil时,默认获取当前上下文,返回值类型为table。若上下文为空,创建新上下文并返回,返回值类型为table

异常

示例

lua
local context = require 'mc.context'
local ctx = context.get_context_or_default(co)
local ctx1 = context.get_context_or_default()

context.set_context

描述

  • 设置上下文

参数

参数类型描述是否必选
ctxtable上下文可选
cothread协程,co为nil时,默认设置当前上下文可选

返回

异常

示例

lua
local context = require 'mc.context'
context.set_context(ctx, co)

context.with_context

描述

  • 临时切换到指定上下文,在回调结束后恢复原上下文

参数

参数类型描述是否必选
ctxtable上下文必选
cbfunction回调函数必选

返回

异常

示例

lua
local context = require 'mc.context'
context.with_context(ctx, cb)

context.copy_context

描述

  • 复制上下文

参数

参数类型描述是否必选
ctxtable上下文可选

返回

  • 返回复制的上下文,类型为table. ctx为nil时,默认复制当前上下文

异常

示例

lua
local context = require 'mc.context'
local new_ctx = context.copy_context(ctx)

context.is_empty

描述

  • 上下文判空

参数

返回

  • 返回判空结果,类型为boolean

异常

示例

lua
local context = require 'mc.context'
local is_empty = ctx:is_empty()

context.get_initiator

描述

  • 从上下文获取调用者信息

参数

返回

  • 返回包含Interface、UserName、ClientIP信息的表

异常

示例

lua
log:operation(ctx:get_initiator(), 'LSW', 'Reset LSW Successfully')