HTTP 服务器
Deno 内置 HTTP 服务器
Deno 提供了内置的 HTTP 服务器 API Deno.serve,无需安装任何第三方库即可创建高性能的 HTTP/1.1 和 HTTP/2 服务。它基于标准的 Web API Request 和 Response 对象,使得开发者可以快速上手。
一、简单示例
// server.ts
Deno.serve((_req) => {
return new Response("Hello, World!");
});
运行(需要明确授予网络权限):
deno run --allow-net server.ts
注意:
Deno.serve默认监听0.0.0.0:8000。如果端口被占用,会抛出异常。
二、监听指定端口和主机名
通过给 Deno.serve 传递第一个参数(配置对象),可以自定义端口和主机名。
Deno.serve({ port: 4242, hostname: "0.0.0.0" }, (_req) => {
return new Response("Hello, World!");
});
port:监听的端口号(默认8000)。hostname:监听的网络接口(默认"0.0.0.0"表示所有可用接口)。
三、推荐方式:deno serve 命令
Deno 提供了一个专用的 deno serve 命令,可以以更简洁的方式运行 HTTP 服务器。使用该命令时,文件必须导出一个包含 fetch 处理函数的默认对象。
// server.ts
export default {
fetch(_req: Request) {
return new Response("Hello, World!");
},
onListen({ hostname, port }) {
console.log(`Server running at http://${hostname}:${port}/`);
},
} satisfies Deno.ServeDefaultExport;
运行:
deno serve --port=3000 server.ts
deno serve 会自动处理权限(隐式添加 --allow-net),并提供 --watch 等开发友好选项。
四、路由示例
根据请求的 URL 路径返回不同内容:
export default {
fetch(request: Request) {
const url = new URL(request.url);
if (url.pathname === "/api/health") {
return Response.json({ status: "ok" });
}
if (url.pathname === "/api/users") {
return Response.json([
{ id: 1, name: "Alice" },
{ id: 2, name: "Bob" },
]);
}
return new Response("Not found", { status: 404 });
},
} satisfies Deno.ServeDefaultExport;
特点:
- 使用标准
URL构造函数解析请求路径和查询参数。 - 使用
Response.json()快捷方法返回 JSON 数据。 - 可以返回
404、500等状态码。
五、进阶用法
- 获取请求体:通过
await request.json()、request.text()或request.formData()。 - 读取请求头:
request.headers.get("content-type")。 - 流式响应:
return new Response(readableStream)。 - 强制使用 HTTP/2:Deno 会根据客户端能力自动协商,目前无需显式配置。
六、注意事项
- 权限要求:必须授予
--allow-net,否则Deno.serve会因权限错误而失败。 - 并发模型:Deno 默认使用多线程(基于 Tokio)处理请求,无需额外配置即可应对大量并发连接。
- 生产部署:建议搭配反向代理(如 Nginx)或直接使用
deno serve配合--allow-net和--addr参数。
总结
| 特性 | 说明 |
|---|---|
| API | Deno.serve 或 deno serve 命令 |
| 协议 | HTTP/1.1 + HTTP/2 |
| 默认端口 | 8000 |
| 权限 | --allow-net |
| 响应对象 | 标准 Response |
| 推荐方式 | deno serve server.ts |
Deno 内置的 HTTP 服务器足以支撑中小规模服务,且与 Web 标准完全兼容。更复杂的路由、中间件可结合 Hono 等框架(通过 npm:hono 或 JSR 引入)。
参考文献
| 资料 | 说明 |
|---|---|
| Deno.serve | API 参考 |
| deno serve | CLI |
| Web Fetch API | Request / Response |
相关文章
Deno 基础
Deno 是基于 V8 与 Rust 的 JavaScript/TypeScript 运行时,由 Node.js 原作者 Ryan Dahl 发起。官方文档:docs.deno.com。与 Node、Bun 的对比见 运行时对比。
内置工具链
Deno 提供了开箱即用的工具链,无需安装任何第三方依赖即可完成代码格式化、检查、测试、覆盖率、文档生成和基准测试等任务。
项目初始化与基础命令
Deno 提供了开箱即用的项目管理工具集,无需额外配置即可初始化项目、运行脚本、执行代码片段等。
包管理与依赖
Deno 以 deno.json 管理项目(imports、tasks 等),依赖通过 URL、jsr:、npm: 解析并缓存到本地(默认 DENO_DIR),通常不需要像 Node 那样维护庞大的 node_modules 树。在需…
其他配置
Deno 默认禁止访问环境变量,以遵循最小权限原则。必须通过 --allow-env 标志显式开启。
权限模型
Deno 默认在安全的沙盒环境中执行任何代码——无论是你的主程序还是第三方依赖,都没有文件、网络、环境变量或子进程的访问权限。只有通过 命令行标志显式授予 的权限才能被使用。
Series
deno
3 / 8