跳至主要内容
本页内容

规划你的实现

例如,假设你正在构建一个类似 Salesforce 的 SaaS CRM 平台。 你希望赋予你的客户编写 JavaScript 代码的能力,这些代码将在每次捕获到新线索时执行。

如果你打算使用 Deno Deploy 实现此功能,以下是你可以考虑的构建方法

  • 创建一个 **项目**,并将该项目与数据库中的客户帐户关联。 这将允许你跟踪每个客户产生的使用情况,并可能使用有关该项目的分析信息对他们进行计费。
  • 创建一个 **部署**,其中包含你的最终用户提供的代码,该代码应在创建新线索时运行。
  • 使用同一项目中的多个部署,你可以实现事件处理逻辑的“暂存”或“生产”版本。
  • 你的 CRM 软件将通过向部署发送 HTTP 请求并等待响应,与最终用户的代码进行通信。
  • 将来,如果你想支持为 CRM 中的其他事件编写代码(例如创建新联系人或每晚发送自动报告),你可以为每个事件创建一个项目,并使用类似于上述流程进行处理。

让我们看一个实现此功能所需的 API 端点的示例。

为项目创建部署 跳转到标题

上一章 中,你创建了一个新项目并记下了它的 id 属性。 在上一章的示例中,ID 为

f084712a-b23b-4aba-accc-3c2de0bfa26a

你可以使用项目标识符 为该项目创建部署。 创建一个名为 create_deployment.ts 的新文件,并包含以下代码以为你项目创建新的“hello world”部署。

create_deployment.ts
const accessToken = Deno.env.get("DEPLOY_ACCESS_TOKEN");
const API = "https://api.deno.com/v1";

// Replace with your desired project ID
const projectId = "your-project-id-here";

// Create a new deployment
const res = await fetch(`${API}/projects/${projectId}/deployments`, {
  method: "POST",
  headers: {
    Authorization: `Bearer ${accessToken}`,
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
    entryPointUrl: "main.ts",
    assets: {
      "main.ts": {
        "kind": "file",
        "content":
          `export default { async fetch(req) { return new Response("Hello, World!"); } }`,
        "encoding": "utf-8",
      },
    },
    envVars: {},
  }),
});

const deployment = await res.json();

console.log(res.status);
console.log(
  "Visit your site here:",
  `https://${project.name}-${deployment.id}.deno.dev`,
);

如果你使用以下命令运行此脚本

deno run -A --env create_deployment.ts

你很快就会在公共 URL 上拥有一个简单的“Hello World!”服务器,可从你的 Deno Deploy 仪表板中看到。

部署的组成部分 跳转到标题

上面的示例展示了一个非常简单的部署示例。 更复杂的部署可能包含以下组件中的一些或全部,在 API 文档中进行了详细描述

  • **资产:** TypeScript 或 JavaScript 源文件、图像、JSON 文档 - 使你的部署运行的代码和静态文件。 这些文件可以编码在你使用 utf-8(对于纯源文件)或 base64(对于图像和其他文本文件)上传到服务器的 JSON 中。 除了实际文件之外,你还可以包含指向其他文件的符号链接。
  • **入口点 URL:** 上述集合中一个资产(TypeScript 或 JavaScript 文件)的文件路径,该资产应执行以启动你的部署中的服务器。
  • **环境变量:** 你可以指定应存在于系统环境中的值,以便通过 Deno.env.get 检索。
  • **数据库 ID:** 应提供给此部署的 Deno KV 数据库的标识符。
  • **编译器选项:** 应用于解释 TypeScript 代码的一组选项。

自定义域名 跳转到标题

创建部署后,将为其分配一个生成的 URL。 这可能适合某些情况,但通常你也要将自定义域名与你的部署相关联。 查看域名 API 参考