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参考

您找到所需内容了吗?

隐私政策