2 个版本

0.0.2 2021年4月5日
0.0.1 2021年4月3日

#25 in #rhai

自定义许可证

24KB
371

tide-rhai

tide 的脚本引擎。

概述

此组件提供在 tide 中运行 rhai 脚本 以处理 HTTP 请求的能力。目前它只支持修改消息,但正在考虑添加更多功能,例如 HTTP 客户端。

安装

$ cargo add tide-rhai

示例

创建一个指向包含 rhai 脚本的目录的 tide 服务器。

use tide_rhai::RhaiDir;
#[async_std::main]
async fn main() -> Result<(), std::io::Error> {
    tide::log::start();
    let mut app = tide::new();
    app.at("/*")
        .get(RhaiDir::new("/*", "./").unwrap());
    app.listen("127.0.0.1:8080").await?;
    Ok(())
}

new 的第一个参数是前缀,应映射到 at 参数。第二个是包含 rhai 脚本的文件夹

创建一个名为 headers.rhai 的 rhai 脚本,它选择一个标题并以 JSON 消息返回它。注意它不必命名为 .rhai,但 VS Code 支持该文件扩展名。

let obj = #{};
obj.message = "Is this acceptable?" + ctx.headers["accept"];
obj

这里我们使用上下文对象的 headers 属性。如果是 POST 请求,则 ctx 对象还将包含一个 data 属性,其中包含已发送到服务器的 JSON。

当你现在运行到 https://127.0.0.1:8080/headers.rhai 时,你应该看到以下内容

{"message":"Is this acceptable?text/html,application/xhtml+xml,application/xml;q=0.9,
image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9"}

此示例也可以通过克隆此存储库并运行来运行

$ cargo run --example samples

然后浏览到

https://127.0.0.1:8080/helloworld.rhai https://127.0.0.1:8080/headers.rhai https://127.0.0.1:8080/fetch.rhai

待办事项列表

  • 日志记录 - 集成 tide 日志系统
  • HTTP 客户端 - 类似于 fetch 的 API
  • 基准测试 - 管理回归的脚本集合
  • 可观察性 - 支持 BPF/DTrace 探针。也许火焰图或状态图
  • 模块系统 - Rhai 支持模块,但没有模块系统。

依赖关系

~12–24MB
~377K SLoC