Deno 入门:使用 TypeScript 编写 HTTP 服务器

阅读时长 4 分钟读完

Deno 是一个新兴的 JavaScript/TypeScript 运行时,由 Node.js 的创始人之一 Ryan Dahl 所创造。Deno 的目标是成为一个安全的运行时环境,可以放心地运行 JavaScript 和 TypeScript 代码。本文将介绍如何使用 Deno,使用 TypeScript 编写一个 HTTP 服务器。

安装 Deno

安装 Deno 非常简单,你可以直接从官网下载预编译的二进制文件并运行即可。你也可以通过包管理器如 homebrew(MacOS)或者 scoop(Windows)来安装 Deno,非常方便。

初始化项目并安装依赖

初始化 Deno 项目非常简单。你可以在任何目录下运行 deno init 命令来创建一个基本的 Deno 项目。

然后安装需要的依赖。在本文中,我们将使用内置的 http 模块和第三方依赖 encodr 来解析请求内容。

编写服务器代码

我们将使用 TypeScript 编写服务器代码。在项目的根目录下创建 server.ts 文件,并添加以下代码。

-- -------------------- ---- -------
------ - -------------- - ---- ---------------------------------------
------ - ----- - ---- ------------------------------------

--------- ---- -
  ----- -------- ----
-

----- ------ - ----------------------- ----- ----- -- -
  ----- ----- ---- - ---
  ----- ---- - ----- -----------------------
  ----- ------- - --- ---------------------------
  -- ----------- --- ------- -
    ----- ----------- - --------------------------------
    -- -------------------------------------------------------------- -
      ----------- - ----- ------------------------------------------
        -------- -- -----
    - ---- -- --------------------------------------------- -
      ----------- - --------------------
    -
  -
  -------------
    ----- ---------------------
  ---
---

------------------- --------- -- ------------------------

这个 HTTP 服务器非常简单。我们使用了内置的 http 模块来监听端口 3000,使用第三方依赖 encodr 来解析字节流。当接收到一个请求时,我们会读取请求的请求体,解析请求的参数,并返回解析后的结果。

运行服务器

将上述的代码保存到 server.ts 文件中后,我们就可以运行它了。在项目的根目录下运行以下命令。

现在你的服务器已经可以运行了。打开浏览器,访问 http://localhost:3000,你将会看到一个空的响应。

发送 GET 请求

访问 http://localhost:3000/hello?name=world,你将会得到以下响应。

我们解析了查询字符串的参数,并将其作为 JSON 格式的字符串作为响应体返回了出来。

发送 POST 请求

发送 POST 请求需要使用工具,如 curl 或者 Postman。以下是一个使用 curl 发送 POST 请求的示例。

运行上述命令后,你将会得到以下响应。

我们使用了 JSON 格式的请求体,并将其解析为 JSON 对象,最终将 JSON 对象作为响应体返回了出来。

结论

在本文中,我们使用 Deno 和 TypeScript 编写了一个简单的 HTTP 服务器,并学习了如何解析 GET 和 POST 请求的参数。在未来的文章中,我们会深入学习如何使用 Deno 来构建 Web 应用程序。

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/6721ef8a2e7021665e097abf

纠错
反馈