xMagic- 仓湖云函数数字应用平台
首页
🍓 函数引擎
更多产品
更多产品
  • 微澜组网
首页
🍓 函数引擎
更多产品
更多产品
  • 微澜组网
  1. 首页
  • xMagic - 仓湖云函数数字应用平台
  • xScript - 仓湖云函数数字应用引擎
  • xMagic - 二开应用场景案例
  • 数据应用
    • 消息订阅(WSS)
    • 消息订阅(SSE)
      GET
    • 用户信息
      GET
    • 免密登陆(短信)
      POST
  • xScript - x16.25.11
    • assert
    • buffer
    • color
    • compress
    • console
    • crontab
    • crypto
    • encoding
    • events
    • evenloop
    • esm
    • fetch
    • fs
    • image
    • kv
    • mail
    • ml
    • mqtt
    • multipart
    • net
    • os
    • path
    • process
    • protobuf
    • querystring
    • redis
    • request
    • require
    • sql
    • tty
    • tui
    • ua
    • url
    • util
    • websocket
    • xml
    • yaml
    • mongo
    • http
    • stream
    • runtime
  • 小工具
    • APS - 代理转发
      • Any Proxy Service - 高级 HTTP/HTTPS/gRPC 代理转发工具
      • 配置指南 - 双向 Headers 和 Match/Replace
  • 数据模型
    • Schemas
      • AdminChangeAvatarReq
      • casbin.CasbinRule
      • AdminDelBatchReq
      • entity.DeptLable
      • AdminDelReq
      • entity.DevGenTable
      • AdminListReq
      • entity.DevGenTableColumn
      • AdminLoginReq
      • entity.FlowWorkClassify
      • AdminPostReq
      • entity.FlowWorkInfo
      • AdminReply
      • entity.FlowWorkTemplates
      • AdminUpdatePwdReq
      • entity.LogLogin
      • MenuDelBatchReq
      • entity.LogOper
      • MenuDelReq
      • entity.LoginM
      • MenuListReq
      • entity.MenuLable
      • MenuPostReq
      • entity.MenuPath
      • MenuReply
      • entity.ResEmail
      • RoleApisReq
      • entity.ResOss
      • SystemApiDelBatchReq
      • entity.ScreenGroupLabel
      • SystemApiDelReq
      • entity.SysApi
      • SystemApiListReq
      • entity.SysConfig
      • SystemApiPostReq
      • entity.SysDept
      • SystemApiReply
      • entity.SysDictData
      • SystemDepartmentDelBatchReq
      • entity.SysDictType
      • SystemDepartmentDelReq
      • entity.SysJob
      • SystemDepartmentListReq
      • entity.SysMenu
      • SystemDepartmentPostReq
      • entity.SysNotice
      • SystemDepartmentReply
      • entity.SysPost
      • SystemRoleApiDelBatchReq
      • entity.SysRole
      • SystemRoleApiDelReq
      • entity.SysTenants
      • SystemRoleApiListReq
      • entity.SysUser
      • SystemRoleApiPostReq
      • entity.SysUserB
      • SystemRoleApiReply
      • entity.SysUserId
      • SystemRoleDelBatchReq
      • entity.SysUserView
      • SystemRoleDelReq
      • entity.VisualRuleChain
      • SystemRoleListReq
      • entity.VisualScreen
      • SystemRoleMenuAddReq
      • entity.VisualScreenGroup
      • SystemRoleMenuDelBatchReq
      • form.Login
      • SystemRoleMenuDelReq
      • from.SendMail
      • SystemRoleMenuListReq
      • map[string]interface {}
      • SystemRoleMenuPostReq
      • map[string]string
      • SystemRoleMenuReply
      • model.BaseAutoModel
      • SystemRolePostReq
      • model.BaseModel
      • SystemRoleReply
      • model.ResultPage
      • model.ResultPage.data
      • vo.AuthVo
      • vo.DeptTreeVo
      • vo.MenuTreeVo
      • vo.MetaVo
      • vo.RouterVo
      • vo.TableInfoVo
      • vo.TokenVo
      • vo.UserRolePost
      • vo.UserVo
      • vo.UserVo.data
首页
🍓 函数引擎
更多产品
更多产品
  • 微澜组网
首页
🍓 函数引擎
更多产品
更多产品
  • 微澜组网
  1. 首页

xScript - 仓湖云函数数字应用引擎

仓湖云函数数字应用引擎开发者使用手册#

简介#

仓湖云函数数字应用引擎( xScript Engine ,简称 xe )是一个轻量级的运行时环境,旨在为开发者提供便捷的开发体验, 尤其是对于熟悉前端 JavaScript 技术的人员 ,能够快速上手后端开发。本指南将详细介绍该引擎的相关 技能要求、特性、使用方法以及内置的各种库和函数。
其主要特性为 :
Rect 4.svg轻量化Rect 6.svg跨平台Rect 8.svg效率高Rect 10.svg国产信创
单文件支持主流桌面系统原生开发完整自主产权
无依赖支持主流服务器系统主动缓存国产硬件平台
大小10M提供移动端SDK自动回收信创生态兼容
生态兼容 :
Javascript生态:
完全兼容CommonJS / ECMAScript 5~14 大部分特性兼容 / Node.JS 部分特性兼容
国产信创生态认证:
兆芯处理器、龙芯处理器、海光处理器、飞腾处理器、鲲鹏处理器、申威处理器、高斯数据库、金仓数据库、达梦数据库、湖南麒麟(麒麟信安)操作系统、中标麒麟(银河麒麟)操作系统、普元中间件、中科曙光
同类产品对比:
维度xScriptDenoNode.js
并发模型多线程真并发(自动调度)单线程 + Worker Threads(手动管理)Eventloop + Cluster模式(回调地狱)
开发门槛内置ORM/API生成器需要组合第三方库需要组合第三方库
工具链整合标准库+扩展库+开箱即用MCP/建模工具功能分散的标准库npm依赖冲突风险
类型安全底层静态类型 + JS动态类型仅TypeScript无强制类型检查
冷启效率10ms级Serverless响应平均500ms冷启响应平均800ms冷启响应
开发效率一分钟生产级API缺乏成熟ORM需手动搭建架构
产品定位:
1.中小团队全栈开发("一人搞定前后端")
2.企业内部工具链开发(快速构建内部应用系统)
3.数据应用加工或云函数轻应用场景(快速组合数据形成API能力)
xScript衍生产品:
xMagic快开平台、 xMagic+数字应用平台、有用金融快贷平台(xMagic+)、阿克苏中小企业服务平台 (xMagic+)、重庆交通开投科技项目管理系统(xMagic+)
*参考1. MDN文档官网(简体中文):
JavaScript | MDN (mozilla.org)   https://developer.mozilla.org/zh-CN/docs/Web/JavaScript

启动#

使用xe运行脚本的方式很简单,我们按照以下几步即可完成:
1.创建项目文件夹
2.下载最新版本到文件夹
3.创建一个测试脚本文件 test.js
4. 打开shell或命令提示符( windows)
5.1.执行 xe 开启cli交互模式执行指令
5.2.1.编写test.js内容为 function main() { console.log('hello!')}
5.2.2.执行 xe test.js 运行脚本逻辑

脚本结构#

内置关键字#

use - 引用其它脚本内容#

内置常量#

scriptPath - 脚本所在目录#

类型 String - 云函数脚本文件所在的系统绝对路径

runtimePath - 引擎所在目录#

类型 String - 云引擎二进制文件所在的系统绝对路径

rootPath - 函数运行目录#

类型 String - 云引擎定义的运行目录(-path参数的值)

内置库#

request库#

multipart库#

crypto 库#

encoding库#

sql库#

*支持连接池,所有的数据库连接必须唯一命名。连接建立后,可全局多次复用,无需重复创建连接。
警告 ⚠️ 不要为了图方便而使用字符串拼接的方式组合sql语句,不要为了图方便而直接像下面测试案例一样取数据库所有数据到Runtime,请严格的使用WHERE和LIMIT 来限制数据范围及分页。

redis库#

*支持cache池,所有的数据库连接必须唯一命名。连接建立后,可全局多次复用,无需重复创建连接。

cache库#

*支持连接池,所有的数据库连接必须唯一命名。连接建立后,可全局多次复用,无需重复创建连接。

fs库#

os库#

ex库#

xml和yaml库#

color库#

image库#

wallet库#

mail库#

querystring库#

crontab库#

influxdb库#

由于该库导致x86的macos平台出现错误,因此暂不对外开放。有特殊需求请联系 js@the.bb 寻求帮助。

elasticsearch库#

mongo库#

runtime库#

注意 ⚠️ runtime为内置核心库,不需要require即可直接使用。

net库#

ws库#

mqtt库#

compress库#

console库#

webservice库#

国产数据库#

sql库 - 达梦数据库#

*支持连接池,所有的数据库连接必须唯一命名。连接建立后,可全局多次复用,无需重复创建连接。
结构化查询语言 DM_SQL 简介 | 达梦技术文档 (dameng.com)| SQL语句语法及定义详见官方文档

达梦数据库连接串属性表#

属性名称说明
socketTimeout套接字超时时间,缺省为 0
escapeProcess是否进行语法转义处理,缺省为 false;取值范围(true,false)
autoCommit是否自动提交,缺省为 true;取值范围(true,false)
maxRows结果集行数限制,若超过上限,则对结果集进行截断,取值范围 0~2147483647,缺省为 0,表示无限制
rowPrefetch预取行数,缺省为 10
lobModeLob 模式,缺省为 1;1: 分批缓存到本地,2: 一次将大字段数据缓存到本地
ignoreCase是否忽略大小写,缺省为 true,取值范围(true,false)
alwayseAllowCommit在自动提交开关打开时,调用 rollback()接口是否不报错,缺省为 true,取值范围(true,false)
batchType批处理类型,缺省为 1,1:进行批量绑定,2:不进行批量绑定
appName客户端应用程序名称
sessionTimeout会话超时时间,缺省为 0
sslCertPath指定 ssl 加密证书文件的路径
sslKeyPath指定 ssl 加密密钥文件的路径
mppLocal是否 MPP 本地连接,缺省为 false;取值访问(true,false)
rwSeparate是否使用读写分离系统,缺省为 false;取值访问(false:不使用,true:使用)
rwPercent分发到主库的事务占主备库总事务的百分比,取值范围 0~100,缺省为 25
isBdtaRS是否使用列模式结果集,缺省为 false;取值范围(true,false)
doSwitch连接发生异常或一些特殊场景下的连接处理策略。取值范围 0~2;0:关闭连接;1:当连接发生异常时自动切换到其他库,无论切换成功还是失败都会报错,用于通知上层应用进行事务执行失败时的相关处理;2:配合 epSelector=1 使用,如果服务名列表前面的节点恢复了,将当前连接切换到前面的节点上;缺省为 0
continueBatchOnError批量执行出错时是否继续执行;缺省为 false;取值范围(true,false)
connectTimeout连接数据库超时时间;单位 ms,取值范围 0~2147483647,0 表示无限制;缺省为 5000
columnNameUpperCase列名转换为大写字母,缺省为 false;取值范围(true,false)
rwIgnoreSql读写分离是否忽略 sql 类型,并按比例分发到主/备库,缺省为 false,取值范围(true,false)
compatibleMode兼容其他数据库, 属性值为数据库名称(例如:Oracle), 支持兼容 Oracle 和 Mysql
dbAliveCheckFreq检测数据库是否存活的频率,单位 ms,缺省为 0;0:不检测,1:检测
logDir日志等其他一些驱动过程文件生成目录,缺省值是当前工作目录
logLevel生成日志的级别,日志按从低到高依次如下(off:不记录;error:只记录错误日志;warn:记录警告信息;sql:记录 sql 执行信息;info:记录全部执行信息;all:记录全部),缺省为 off,高级别同时记录低级别的信息
logFlushFreq日志刷盘频率,单位 s,缺省为 10
logBufferSize日志缓冲区大小,缺省为 32768
logFlusherQueueSize日志刷盘线程中等待刷盘的日志缓冲区队列大小,缺省为 100
statEnable是否启用状态监控,缺省为 false;取值范围(true,false)
statFlushFreq状态监控统计信息刷盘频率,单位 s;缺省为 3
statSlowSqlCount日志打印慢 sql top 行数,缺省为 100;取值范围 0~1000
statHighFreqSqlCount日志打印高频 sql top 行数,缺省为 100;取值范围 0~1000
statSqlMaxCount状态监控可以统计不同 sql 的个数,缺省为 100000;取值范围 0~100000
statSqlRemoveMode执行的不同 sql 个数超过 statSqlMaxCount 时使用的淘汰方式,取值范围(latest/eldest);latest 淘汰最近执行的 sql,eldest 淘汰最老的 sql,缺省为 latest
statDir状态监控信息以文本文件形式输出的目录,无缺省值,若不指定则监控信息不会以文本文件形式输出
schema指定用户登录后的当前模式,缺省为用户的默认模式
cipherPath第三方加密算法动态链接库位置
compress是否压缩消息。取值范围 0~2;0:不压缩;1:完全压缩;2:优化的压缩;缺省为 0
compressId压缩算法。0:ZLIB 压缩;1:SNAPPY 压缩;缺省为 0
svcConfPath自定义客户端配置文件(dm_svc.conf)的完整路径
batchAllowMaxErrorscontinueBatchOnError 开启时,最大可容错行数,超过则停止执行,但不报错,取值范围 0~65535,缺省为 0,表示无限制
batchNotOnCall存储过程是否不批量执行,默认 false,取值(true,false)
cluster当 doSwitch=2,epSelector=1 时,用于检测 DSC 集群节点故障恢复是否成功,默认空,取值(DSC)
columnNameCase列名大小写显示策略,默认空,取值(upper,lower)
epSelector服务名连接策略。0:依次选取列表中的不同节点建立连接,使得所有连接均匀地分布在各个节点上;1:选择列表中最前面的节点建立连接,只有当前节点无法建立连接时才会选择下一个节点进行连接;默认 0
loginDscCtrl服务名连接数据库时是否只选择 dsc control 节点的库,默认 false,取值(true,false)
osName操作系统名称,默认空
addressRemap地址重定向,格式:(IP_1:PORT_1,IP_2:PORT_2),如:addressRemap=(192.168.0.1:5236,localhost:5237),如果连接 192.168.0.1:5236,则实际连接到 localhost:5237。可以配置多个地址重定向,例如:addressRemap=(localhost:5236,localhost:5237)(localhost:5238,localhost:5239),缺省为空
userRemap用户名重定向,格式:(USER1,USER2),如:userRemap=(USER1,USER2),如果使用 USER1 用户连接,则实际连接用户为 USER2。可以配置多个重定向,例如:userRemap=(USER1,USER2)(USER3,USER4),缺省为空
switchInterval服务名连接数据库时,若遍历了服务名中所有库列表都未找到符合条件的库成功建立连接,等待一定时间再继续下一次遍历;单位 ms,取值范围 0~2147483647,缺省为 1000
switchTimes服务名连接数据库时,若未找到符合条件的库成功建立连接,将尝试遍历服务名中库列表的次数,取值范围 0~2147483647,缺省 1

sql库 - 人大金仓数据库#

*支持连接池,所有的数据库连接必须唯一命名。连接建立后,可全局多次复用,无需重复创建连接。
KingbaseES SQL语言参考手册 — KingbaseES产品手册| SQL语句语法及定义详见官方文档

人大金仓数据库连接串属性表#

参数名说明备注
host数据库服务器的地址,包括域名、主机名、主机的 IP 地址等,也可以是UNIX domain socket默认为localhost
port端口号默认为54321
user登录的用户名
password用户名的密码
dbname连接至的数据库名
sslmode是否使用SSL默认开启使用;可选参数为``Disable, Require, verify-ca, verify-full``
sslcert证书路径,必须包含PEM编码数据
sslkey密钥文件路径,必须包含PEM编码数据
sslrootcert根证书路径,必须包含PEM编码数据
connect_timeout连接的最长等待时间,单位为秒0值或未指定均为无限等待
附1: HTTP 服务模块说明

模块流程#

在本次测试案例中,我们将HTTP服务启动逻辑写到 site.js 文件内,内容如下:
运行以下指令:
你可以看到以下返回:
很好!我们已经启动了xe引擎。接下来通过127.0.0.1:8080 就可以访问到对应的服务页面了。

目录结构#

响应请求#

请求处理#

请求体#

可通过全局变量payload进行获取。payload的类型为object,包含了从客户端发送请求的全部参数和数据。

响应体#

可以使用response类的方法进行对应的操作。(详见response内置库的操作)

时序#

客户端 ---- 发起请求 --- > 引擎(core.js) ---- > entry函数 ---- > X-Method指定或main函数 ---- return ---- > 客户端
注意 ⚠️ 默认情况下,会主动要求浏览器添加缓存。若需浏览器清空全部缓存可以通过内置库函数runtime.clear() 可以在响应头要求浏览器清空缓存(包括cookies)。

脚本文件#

core.js - 核心函数脚本#

你可以将其理解为一个拦截所有请求的js,当该js存在的时候,所有请求都会被拦截到这个js进行处理。建议如果需要完全的自定义请求处理,请通过core.js实现请求拦截并通过runtime.goto指定处理函数。
**1.全局函数文件为-path参数定义的目录下core.js中的内容。**global.js 内定义的函数和量对其生效。

global.js - 全局函数脚本#

1.全局函数文件为-path参数定义的目录下global.js中的内容。
2.在全局函数文件内部定义声明的变量(var)、常量(const)、引用(require)、函数(function)等,对全部的脚本文件生效。并优先级低于脚本文件。
3.全局函数文件中可声明函数init,该函数会在每个脚本被加载时运行,优先级高于脚本文件内的entry函数。一般建议用于声明数据库、API、公共对象等。

function.js - 脚本函数脚本#

1.脚本函数为每个文件夹路径下的function.js中的内容。
2.脚本函数文件中可声明函数entry,该函数会在每次请求执行其它函数时被触发。当脚本函数被运行时才会触发,因此可以理解为在处理每一个请求之前会触发这个函数。一般建议用于声明数据库、API、数据权限预检等。通过return可以终止后续的函数请求。
3.通过配置请求头X-Method可以指定执行脚本函数文件中的哪一个函数(执行前会先执行entry)。默认执行名称为main的函数。
4.当脚本函数文件中不存在entry和main函数时,未通过X-Method指定函数,将返回undefiled内容及200(OK)状态码。

模块内置扩展库#

payload 库#

注意 ⚠️ payload为内置扩展库,不需要require即可直接使用。

payload.get#

类型 Object - 返回的Object包含了客户端通过HTTP向引擎发送的完整请求体数据,
注意:客户端发起的提交类型请求,请求体(Body)的数据类型为Bytes(Buffer),实际运用中可能需要使用encoding.form方法进行转码(详见encoding库介绍)。
例如 客户端发起GET请求 127.0.0.1:8080/demo?k=v&m=n则 payload.get() 的内容即以下
{
    "method": "GET",
    "url": "/demo?k=v&m=n",
    "path": "/demo",
    "proto": "HTTP/1.1",
    "proto_major": 1,
    "proro_minor": 1,
    "header": {
        "Sec-Ch-Ua-Arch": [
            "\"arm\""
        ],
        "Sec-Ch-Ua-Platform": [
            "\"macOS\""
        ],
        "Sec-Ch-Ua-Bitness": [
            "\"64\""
        ],
        "Dnt": [
            "1"
        ],
        "User-Agent": [
            "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36 Edg/119.0.0.0"
        ],
        "Sec-Fetch-Mode": [
            "navigate"
        ],
        "Dpr": [
            "2"
        ],
        "Sec-Ch-Ua-Mobile": [
            "?0"
        ],
        "Sec-Fetch-User": [
            "?1"
        ],
        "Accept-Language": [
            "zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6"
        ],
        "Viewport-Width": [
            "1432"
        ],
        "Sec-Ch-Ua-Platform-Version": [
            "\"14.0.0\""
        ],
        "Sec-Fetch-Dest": [
            "document"
        ],
        "Accept-Encoding": [
            "gzip, deflate, br"
        ],
        "Connection": [
            "keep-alive"
        ],
        "Cache-Control": [
            "max-age=0"
        ],
        "Upgrade-Insecure-Requests": [
            "1"
        ],
        "Accept": [
            "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7"
        ],
        "Sec-Fetch-Site": [
            "none"
        ],
        "If-None-Match": [
            "\"fafaab8734167757e0404fd0dd40206c551f1efc\""
        ],
        "Sec-Ch-Ua": [
            "\"Microsoft Edge\";v=\"119\", \"Chromium\";v=\"119\", \"Not?A_Brand\";v=\"24\""
        ],
        "Sec-Ch-Ua-Model": [
            "\"\""
        ],
        "Sec-Ch-Ua-Full-Version-List": [
            "\"Microsoft Edge\";v=\"119.0.2151.46\", \"Chromium\";v=\"119.0.6045.105\", \"Not?A_Brand\";v=\"24.0.0.0\""
        ]
    },
    "body": [],
    "content_length": 0,
    "host": "127.0.0.1:8080",
    "form": {},
    "query": {
        "k": [
            "v"
        ],
        "m": [
            "n"
        ]
    },
    "remote_addr": "127.0.0.1:54201"
}

payload.toCURL#

*为了方便导出请求到PostMan等API测试工具进行测试,因此有了payload.toCURL的存在。

payload.set#

*为了方便下游调用,因此需要对客户端提交的请求体内容进行一些调整。因此有了payload.set的存在。
注意 ⚠️通过 payload.set配置的数据或参数不会返回到客户端,仅作为上下游数据传递使用。

response 库#

注意 ⚠️ response为内置核心库,不需要require即可直接使用。

response.headers.set(key, value)#

设置指定键名的头部信息值。如果键名或值为空,则不进行设置。

response.headers.get(key)#

获取指定键名的头部信息值。如果找不到对应的键名,则返回`null`。

response.headers.add(key, value)#

添加指定键名的头部信息值。如果键名或值为空,则不进行添加。

response.headers.del(key)#

删除指定键名的头部信息。

response.cookies.get(key)#

获取指定键名的Cookie值。如果找不到对应的键名,则返回`null`。

response.cookies.set(key, value)#

设置指定键名的Cookie值。如果键名或值为空,则不进行设置。

response.cookies.setRaw(cookieString)#

设置指定键名的原始Cookie值。如果值为空,则不进行设置。

response.cookies.del(key)#

删除指定键名的Cookie。

response.write(value)#

将指定值写入响应。

response.forward(url_path)#

将指定值写入响应。

response.body.get()#

返回 response.body 里的内容

response.body.set(value)#

将指定值设置为response.body 的值。

response.status.code(code)#

设置响应的状态码为指定值。
1. `response.status.continue()`:设置响应的状态码为`100 Continue`。
2. `response.status.switchingProtocols()`:设置响应的状态码为`101 Switching Protocols`。
3. `response.status.processing()`:设置响应的状态码为`102 Processing`。
4. `response.status.earlyHints()`:设置响应的状态码为`103 Early Hints`。
5. `response.status.ok()`:设置响应的状态码为`200 OK`。
6. 其他方法依次类推,用于设置不同的HTTP状态码。
注意:所有响应码建议以MDN标准定义为准进行实际应用。详见:
HTTP 响应状态码 - HTTP | MDN (mozilla.org)https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Status
修改于 2025-10-29 12:18:55
上一页
xMagic - 仓湖云函数数字应用平台
下一页
xMagic - 二开应用场景案例
Built with