deno.com
本页内容

规划您的实施

假设,例如,您正在构建一个像 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

您应该很快就会有一个简单的“Hello World!”服务器在公共 URL 上线,从您的 Deno Deploy 仪表板可见。

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

上面的示例展示了一个非常简单的部署示例。更复杂的部署可能包括以下部分或全部组件,完整描述请参见此处 API 文档

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

自定义域名 跳转到标题

创建部署后,将为其分配一个生成的 URL。对于某些场景来说,这可能就足够了,但通常您也希望将自定义域名与您的部署关联。查看域名 API 参考

您找到所需的信息了吗?

隐私政策