后台题目脚本
在管理面板中,【出题】 -> 【题目脚本】 页面可以管理并编辑所有的后台脚本。
后台脚本是一个 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>
里。通过题目脚本读取它,并按当前进度返回给解题者。