Trilium为脚本提供了一种打开公共REST端点的机制。这为与其他服务的各种集成开辟了一条途径-一个简单的示例是通过发出slash命令从Slack创建新笔记(例如/trilium buy milk
)。
从Trilium外部创建笔记
让我们看一个例子。目标是提供一个REST端点,我们可以向其发送标题和内容,Trilium将创建一个笔记。
我们将首先创建一个JavaScript后端代码笔记,其中包含:
const {req, res} = api;
const {secret, title, content} = req.body;
if (req.method == 'POST' && secret === 'secret-password') {
// notes must be saved somewhere in the tree hierarchy specified by a parent note.
// This is defined by a relation from this code note to the "target" parent note
// alternetively you can just use constant noteId for simplicity (get that from "Note Info" dialog of the desired parent note)
const targetParentNoteId = await api.currentNote.getRelationValue('targetNote');
const {note} = await api.createTextNote(targetParentNoteId, title, content);
res.status(201).json(note);
}
else {
res.send(400);
}
该脚本笔记还具有以下两个属性:
- 标签
customRequestHandler
带有值create-note
- 关系
targetNote
指向应保存新笔记的笔记
说明
让我们通过使用HTTP客户端发送请求进行测试:
POST http://my.trilium.org/custom/create-note
Content-Type: application/json
{
"secret": "secret-password",
"title": "hello",
"content": "world"
}
注意请求路径中的/custom
部分-Trilium将带有此前缀的任何请求视为"custom",并尝试通过查看所有具有customRequestHandler
[标签)(./属性.md)的笔记来查找匹配的处理程序。然后,此标签的值包含一个正则表达式,该正则表达式将与请求路径匹配(在本例中为平凡的正则表达式"create-note")。
然后Trilium将找到上面创建的代码笔记并执行它。api.req
,api.res
被设置为请求和响应的对象,从中我们可以得到请求和响应的细节。
在代码笔记中,我们检查了请求方法,然后使用普通身份验证-请记住,默认情况下,这些端点完全未经身份验证,因此您需要自己进行维护。
通过这些检查后,我们将使用脚本API创建所需的笔记。
自定义资源提供者
另一个常见的用例是,你只想公开一个文件笔记-在这种情况下,你可以创建标签customResourceProvider
(值还是路径正则表达式)。
注意:公开的文件需要带有#customResourceProvider =" fonts/myFont.woff"
。
例如,您的文件位于custom/fonts中,你可以通过custom/fonts/myFont.woff
进行调用。
进阶概念
api.req
和api.res
是Express.js对象-你随时可以查看其文档以了解详细信息。
参数
REST请求路径通常在URL中包含参数,例如:
http://my.trilium.org/custom/notes/123
最后一部分是动态的,因此URL的匹配也必须是动态的-因此,匹配是使用正则表达式完成的。customRequestHandler
将与以下值匹配:
notes/([0-9]+)
另外,这还使用括号定义了一个匹配组,从而使提取值变得更加容易。匹配的组位于api.pathParams
:
const noteId = api.pathParams[0];
通常,您还需要查询参数(例如http://my.trilium.org/custom/notes?noteId=123
),您可以使用标准expressreq.query.noteId
获得这些参数。