Skip to content

后台题目脚本

在管理面板中,【出题】 -> 【题目脚本】 页面可以管理并编辑所有的后台脚本。

后台脚本是一个 Javascript 脚本,在后端服务器运行。可以执行题目的后端逻辑。

脚本语法说明

脚本由 JavaScript 语言编写,在后端服务器中,通过 Jurassic 环境运行。

该环境已实现完整的 ES5 语法,支持 ES6 的部分语法。

在脚本中,提供一个全局对象 ctx ,用户的请求、返回数据的传递,以及有一些依赖后端服务器程序才能实现的功能作为方法,通过 ctx 对象提供给脚本使用。

脚本使用

在“题目脚本”页面中,新建或编辑脚本。

必须要给脚本提供一个关键字,供程序调用时识别。一般我们建议,使用活动的简称作为关键字前缀。

脚本内容模板:

javascript
// @ts-check

/**
 * @param {Ctx} ctx 全局上下文对象
 * @param {object} request 用户请求
 * @returns {object} response 返回给用户的数据
 */
function main(ctx, request) {
    // 使用request处理前端的请求

    // 将前端需要的东西return返回
    return {
        data
    }
}

//=======以下是JSON解析与调用脚本,一般不需要修改========
/**
 * @param {Ctx} ctx 全局上下文对象
 */
function _jsonProcessHelper(ctx) {
    let request = JSON.parse(ctx.request);
    let resBody = main(ctx, request);
    let resString = JSON.stringify(resBody);
    ctx.response(resString);
}

_jsonProcessHelper(ctx);

关于 Ctx 结构已经可用的 API,可以查看CCXC backend script API 参考

<data> 数据段

在题目编辑器中编辑 VUE SFC 类型的题目时,在“题目HTML”中除了前端渲染需要的 <template><style> 外,还可以定义 <data> 段。

<data></data> 之间的内容不会返回给前端,而是可以通过题目脚本获取到这个信息。

要在题目脚本中获取 <data> 中的信息,可以使用 ctx.getPuzzleData 方法。

有什么用?

一些题目编写时,部分和题目内容息息相关的数据,为了便于编写,最好和题目的前端定义写在一起。

例如一道按照用户输入不断解锁下一问的题目,我们希望将所有的题目都和前端 Vue 组件一起编写在题目编辑器中。但是这部分信息又不能让解题者一下子知道。

于是,我们可以将这些信息放在 <data> 里。通过题目脚本读取它,并按当前进度返回给解题者。

Released under the MIT License. Powered by VitePress.