自定义请求处理程序

Trilium 为脚本提供了一种打开公共 REST 端点的机制。这为与其他服务的各种集成开辟了一条途径 - 一个简单的例子是通过发出斜杠命令(例如 )从 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 = api.currentNote.getRelationValue('targetNote');

    const {note} = api.createTextNote(targetParentNoteId, title, content);
    const notePojo = note.getPojo();

    res.status(201).json(notePojo);
}
else {
    res.send(400);
}

此脚本注释还具有以下两个属性:

  • 带有值的标签#customRequestHandlercreate-note

  • 指向应保存新注释的注释的关系~targetNote

解释

让我们通过使用 HTTP 客户端发送请求来测试这一点:

POST http://my.trilium.org/custom/create-note
Content-Type: application/json

{
  "secret": "secret-password",
  "title": "hello",
  "content": "world"
}+++++++++++++++++++++++++++++++++++++++++++++++

请注意请求路径中的部分 - Trilium 将任何带有此前缀的请求视为“自定义”,并尝试通过查看所有具有标签的注释来查找匹配的处理程序。然后,此标签的值包含一个正则表达式,该正则表达式将与请求路径匹配(在我们的例子中是简单的正则表达式“create-note”)。/customcustomRequestHandler

然后,Trilium 将找到我们在上面创建的代码注释并执行它。,设置为请求响应对象,我们可以从中获取请求的详细信息并做出响应。api.reqapi.res

在代码说明中,我们检查请求方法,然后使用简单的身份验证 - 请记住,这些端点默认情况下完全未经身份验证,您需要自己处理。

通过这些检查后,我们将使用 Script API 创建所需的注释。

自定义资源提供程序

另一个常见的用例是你只想公开一个文件注释 - 在这种情况下,你创建标签(值再次是路径正则表达式)。customResourceProvider

有关详细信息,请参阅自定义资源提供程序

高级概念

api.req并且是Express.js对象 - 您可以随时查看其文档以获取详细信息。api.res

参数

REST 请求路径通常包含 URL 中的参数,例如:

http://my.trilium.org/custom/notes/123

最后一部分是动态的,因此URL的匹配也必须是动态的 - 因此,匹配是使用正则表达式完成的。以下值将与它匹配:customRequestHandler

notes/([0-9]+)

此外,这还定义了一个使用括号的匹配组,这样可以更轻松地提取值。匹配的组可在以下位置找到:api.pathParams

const noteId = api.pathParams[0];

通常您还需要查询参数(例如,您可以使用标准 express 获取这些参数。http://my.trilium.org/custom/notes?noteId=123req.query.noteId

“您的支持是我持续分享的动力”

微信收款码
微信
支付宝收款码
支付宝

目录关闭