前言
作为一门新型 JavaScript 后端运行时环境,Deno 在很多方面都有其独特之处,其中最值得称道的一点就是其网络库。许多前端开发者已经习惯了使用 fetch 函数来发送网络请求,但是 Deno 的网络库并不仅仅是 fetch 函数的翻版,它还提供了更加强大并且灵活的 API,有助于我们在 Deno 中构建高效的网络应用。本文将探索 Deno 的网络库,并为读者提供深度的指导意义和实用的示例代码。
什么是 Deno 的网络库?
Deno 的网络库是一个用于发送和接收网络请求的模块集合,这个集合包含了一系列的 API,可以帮助我们实现许多有用的功能。这个库的核心组件是一个名为 fetch
的函数,它类似于浏览器中的 fetch
,并且支持 Promise。
除了 fetch
,网络库还包含了其他 API,如 WebSocket
对象、服务器端的 HTTP 监听器等等。
Deno 中的 fetch
函数
fetch
函数在 Deno 中用于发送网络请求,并且与浏览器中的 fetch
函数非常相似,唯一的区别是它处于一个独立的命名空间中。下面是一个使用 fetch
函数发送网络请求的例子:
const response = await fetch("https://jsonplaceholder.typicode.com/posts/1"); const data = await response.json(); console.log(data);
在这个例子中,我们使用 fetch
函数向第三方 API 发送了一个 GET 请求,并使用 await
关键字等待服务器的响应。然后,我们通过调用 json()
方法来访问响应内容。
fetch
函数的参数
fetch
函数的第一个参数是要请求的 URL,第二个参数是一个称为 RequestInit
的可选对象,其中包含了一些可选属性,如 body
(请求正文的内容)、method
(请求的 HTTP 方法)、headers
(请求头)等等。这些属性都是可选的,并且可以使用默认值。
例如,如果我们要发送一个 POST 请求,请求体的主体包含 JSON 数据,则可以使用以下代码:
-- -------------------- ---- ------- ----- ------- - - ------- ------- -------- - --------------- ------------------- -- ----- ---------------- ----- ------- ---- --- --- -- ----- -------- - ----- --------------------------------------------------- --------- ----- ---- - ----- ---------------- ------------------
在这个例子中,我们首先定义了请求的 options
对象,该对象指定了请求的一些属性,例如它使用的 HTTP 方法、请求头和请求正文的内容。然后,我们使用 fetch
函数发送请求,并等待服务器的响应。
WebSocket
对象
除了 fetch
函数,Deno 的网络库还提供了一个名为 WebSocket
的对象,它是一种用于在服务器和客户端之间进行双向通信的网络协议。使用 WebSocket
可以创建一个 WebSocket 连接,并实现实时应用程序、实时聊天等等功能。
下面是创建一个 WebSocket
对象的例子:
-- -------------------- ---- ------- ------ - --------- - ---- ---------------------------------- ----- ------ - --- --------------------------------- ----------------- -- -- - ---------------------- --------- --- -------------------- ------- -- - ------------------- ---------------- ---
在这个例子中,我们使用 WebSocket
构造函数创建一个 WebSocket 连接,并使用 on
方法监听一些事件,例如连接打开和接收到了新消息。WebSocket
还提供了一些其他的方法,例如 close()
和 send()
,它们分别用于关闭 WebSocket 连接和向服务器发送消息。
服务器端的 HTTP 监听器
除了发送网络请求和使用 WebSocket,Deno 的网络库还提供了一个用于创建 HTTP 服务器的 API。我们可以使用 serve()
函数来创建一个 HTTP 监听器,并在其中注册一些回调函数,用于响应监听到的 HTTP 请求。
下面是一个创建 HTTP 服务器的例子:
-- -------------------- ---- ------- ------ - ----- - ---- --------------------------------------- ----- ------ - ------- ----- ---- --- ----------------- ---- -------- --- ----- ------ ------- -- ------- - ----------------- ----- ------- ------- --- -
在这个例子中,我们使用 serve()
函数创建了一个 HTTP 监听器,并将其绑定到了 8000 端口上。然后,我们使用 for await
循环来监听来自客户端的请求,每当有一个新的请求到达时,我们将其响应为一个字符串 Hello, World!
。
实用的示例代码
下面是一些更实用的示例代码,可以帮助读者更好地理解 Deno 的网络库:
1. 使用 WebSocket 实现实时聊天室
-- -------------------- ---- ------- ------ - --------- - ---- ---------------------------------- ----- ------- - --- ----------------- ----- --------- - --------- ------- -------- ---------- -- - --------------------- --- ------ ------ -- -------- - --------- --- ------- - --------------------- - - - ----- ------------- - --------- ------- ------- ---------- -- - --------------------------------- ------------ -------- - ----- ----------- - ---- ---------- -- - ------------------------ -------------- ------------------- - ----- ---------------- - ---- ---------- -- - ------------------------ ----------------- ---------------- ---------------- ------- -- - ----- ------- - ----------------- ---------------------- ---- --- -------------- -- -- ----------------- - ----- ------ - --- ------------------ ----- ---- --- ------------------------ ----- ------- ----------------------- -------- ---------- -- --------------------------
在这个例子中,我们使用 WebSocket
对象实现了一个简单的聊天室应用程序。当某个客户端加入聊天室时,我们将其添加到 clients
集合中,并在 handleConnection
回调函数中设置了 message
和 close
事件的监听器。对于每个收到的消息,我们都将其广播给所有的客户端,除了消息发送者。在客户端关闭连接时,我们将其从 clients
集合中删除,并在 handleClose
回调函数中进行清理工作。
2. 使用 serve()
函数创建一个文件服务器
-- -------------------- ---- ------- ------ - ----- - ---- --------------------------------------- ------ - -------- ---- - ---- ------------------------------------ ----- ------ - ------- ----- ---- --- ------------------- ----- ------- ----- --------------- - ----- --------- -------- -- - ----- -------- - ---------------- --------- ------------- ----- ------- - ------------------ --- - ----- ---- - ----- -------------------- ----- -------- - ----- -------------------- ----- ------- - --- --------- --------------------------- ---------------------- ----------------------------- -------------------------- ------ - ------- ---- ----- ----- ------- - - ----- --- - ------ - ------- ---- ----- --- ------------------------ -------------- ------ - - - ----- ----------- - ----- ------- -- - ------ ----- - ---- -------- ------ ------------ ---- ------- ------ ----------- ---- ------ ------ ------------------ -------- ------ ------------- - - --- ----- ------ ------- -- ------- - ----- -------- - ----- ------------------------- -------------------------- -
在这个例子中,我们使用 serve()
函数创建了一个 HTTP 监听器,并将其绑定到了 8000 端口上。我们使用 extname()
函数来获取请求的文件扩展名,并在尝试打开文件时设置了异常处理。如果文件存在,我们会将其读取为可读的流,并在响应中指定响应头,例如 Content-Type
和 Content-Length
。如果文件不存在,我们将返回一个 404 响应。
结论
Deno 的网络库是一个受欢迎的库,并且为我们提供了很多强大且灵活的 API,例如 fetch
函数、WebSocket
对象、服务器端的 HTTP 监听器等等。在本文中,我们提供了一些实用的示例代码,可以帮助我们更好地理解 Deno 的网络库,并用它来构建高效的网络应用程序。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/6700d29ac842884a45a855d0