
这是什么
一个小程序是一个导出若干 handler 的 JS 模块。handler 跑在服务端的沙箱里——没有网络、没有磁盘、没有作者账号、没有window。它能读到的一切都从 api 来,它想改的一切都作为 effects 声明出去,由站点逐条校验后在一个事务里提交。
这条约束不是限制,而是这套东西能存在的原因:页面说什么都不算数,所以分数、积分、排行榜才可信。
小程序目录
所有已发布的小程序都在 www.nodeloc.com/apps:
权限透明
每个小程序的详情页都列出它获批的全部权限,用户在点开之前就能看到它能做什么:
三种形态
Blocks(默认)
handler 返回组件树,由站点原生渲染。写不了 HTML,所以不可能有 XSS。适合投票、报名、计数器、表单类工具。组件清单见 Blocks 组件。Webview(需管理员单独批准)
小程序自己画界面(HTML + CSS + JS),有真正的客户端循环。代价是页面里的分数不可信——要上排行榜就得让服务端能验算,见编写 handler。webview 需要站点开启该能力后,由管理员为每个小程序单独授予。申请时在
app.json 里声明 "surface": "webview"。Service(机器人)
没有界面。它不渲染任何东西,也没有可点的按钮——由站点事件或定时任务唤醒,以自己的账号说话。欢迎新人、自动回答常见问题、定时开话题、协助审核都属于这一类。 和另外两种最大的不同是它装在哪:不进帖子,而是装到一个范围上。节点主可以自己把它装进自己的节点,装到全站则是管理员的事。装进节点的机器人,权限恰好等于那个节点版主的权限,在别处什么都做不了。 详见机器人。数据模型
- 个人数据区:每个成员在每个安装下有自己独立的 KV 空间。
- 共享区:同一安装下所有人共享(排行榜、世界状态),只有 handler 能写入——页面永远够不到它。
- 安装即隔离:一个安装一份共享区。有全站排行榜的小程序投放方式必须是
single,见 app.json 与 readme。 - 小程序级共享区:跨所有安装共享,只有 handler 写得进去。「一份名单在它运行的每个节点里都一样」这类东西用它,见机器人。
成为开发者
小程序目前处于测试阶段,开发权限按用户组开放。想参与开发请联系管理员开通,获得权限后即可访问作者中心 www.nodeloc.com/apps/authoring。快速开始
拿到权限后,用 CLI 十分钟跑通第一个小程序
