# 运行时与 HTTP

## 运行文件与任务

```bash
deno run main.ts
deno run --watch --allow-net main.ts
deno task dev
```

`deno run` 适合直接执行入口；`deno task` 适合把参数和权限固化到 `deno.json`。对团队项目，优先让 README 和 CI 调用 task，避免每个人记一组不同参数。

## 使用 Web 标准 API

```ts title="main.ts"
const controller = new AbortController();

Deno.serve({ port: 8000, signal: controller.signal }, (request) => {
  const url = new URL(request.url);
  if (url.pathname === "/health") return Response.json({ ok: true });
  return new Response("Not found", { status: 404 });
});

Deno.addSignalListener("SIGTERM", () => controller.abort());
```

```bash
deno run --allow-net main.ts
```

请求与响应使用标准 `Request`、`Response`、`URL`、Streams 和 `fetch`。`Deno.serve` 负责监听；它不是完整的认证、限流或部署平台。

## 环境变量与退出

```ts
const port = Number(Deno.env.get("PORT") ?? "8000");
if (!Number.isInteger(port)) throw new Error("PORT must be an integer");
```

只授予需要的变量：`--allow-env=PORT`。进程退出码、未处理异常和信号处理必须在部署前用目标环境验证。

官方参考：[Run code](https://docs.deno.com/runtime/run/)、[HTTP server](https://docs.deno.com/runtime/fundamentals/http_server/)。
