使用 Javascript 创建后端(4):创建你的第一个 HTTP 服务器

HTTP 模块

HTTP 模块是一组功能,允许你创建和管理自己的 Web 服务器。

提醒:什么是 Web 服务器?

Web 服务器是一组硬件和软件,允许访问存储在计算机上的托管文件、网页和数据库。

Web 服务器还包括 HTTP 服务器。HTTP 服务器是一种通过 HTTP 协议(​​ 浏览器用于显示网页的协议)理解/接收 URL 和请求的软件。

从最简单的层面来说,每当浏览器需要托管在 Web 服务器上的文件或其他内容时,浏览器就会向服务器发出请求(称为发送 HTTP 请求)。当请求到达服务器时,HTTP 服务器会对其进行处理并返回响应。

总而言之,底线是,尽管 HTTP 服务器看起来很复杂,但实际上它只是一连串的请求和响应。你将在下面看到 NodeJS 允许你非常轻松地创建 HTTP 服务器,并且读取请求和发送响应非常容易。

使用 NodeJS 创建 HTTP 服务器

以下是创建 HTTP 服务器的示例

1
2
3
4
5
6
7
8
9
10
const http = require("http");

const server = http.createServer((req, res) => {
// Send response
res.end("Hello World from the server");
});

server.listen(5000, "localhost", () => {
console.log("Server is listening at localhost on port 5000");
});

让我们逐行查看创建服务器的不同步骤

加载 HTTP 模块

1
const http = require("http");

使用回调函数创建服务器。请注意,传递给该函数的两个参数是:reqres

  • req:将包含有关传入请求的信息
  • res:将用于定义传出响应
1
2
3
4
const server = http.createServer((req, res) => {
// send the response
res.end("Hello World from the server");
});

res.end() 告诉服务器响应已完成,现在可以发送

启动服务器。服务器将等待并读取到达端口 5000 的请求。

1
2
3
server.listen(5000, "localhost", () => {
console.log("Server is listening at localhost on port 5000");
});

这是一个无限循环。每次将请求发送到端口 5000 的服务器(例如:localhost:5000)时,服务器都会执行回调(参见前面的代码块),因此在这种情况下会发送响应“来自服务器的 Hello World”

如果你想测试此服务器,请启动应用程序

1
2
$ node app.js
Server is listening at localhost on port 5000

打开浏览器并访问 localhost:5000

浏览器中应显示消息“来自服务器的 Hello World”

事实上,如果你访问任何页面(例如:localhost:5000/about),将始终显示相同的消息。

可以读取请求的 URL 路径(例如:/about 或 /home 等),并根据路径返回不同的响应。

路径信息包含在请求中。

要读取有关请求的信息,我们将使用 req 对象。如你所知,它包含请求的所有信息。

具体来说,URL 路径位于 req.url 属性中

这是一个小型 HTTP 服务器的示例,根据收到的 URL,它会显示不同的页面

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
const http = require("http");

const server = http.createServer((req, res) => {
if (req.url === "/") {
res.end("<h1>Home page</h1>");
} else if (req.url === "/about") {
res.end("<h1>About page</h1>");
} else {
res.end("page not found");
}
});

server.listen(5000, "localhost", () => {
console.log("Server is listening at localhost on port 5000");
});

HTTP 标头

HTTP 标头允许客户端和服务器随请求或响应传递附加信息。

例如,请求的标头可以包含其内容的格式(例如 HTMLJSON)和/或用于用户身份验证的相关信息。

响应标头示例

要向响应添加标头,我们需要在 res.end() 函数之前添加一个函数

1
2
3
4
res.writeHead(404, {
"Content-type": "text/html",
});
res.end("<h1>Page not found</h1>");

writeHead 函数允许你指定消息的内容类型,可以是“text/html”

运行 res.end() 函数时,NodeJS 会将 Header 包含在响应中。

你的第一个 HTTP 服务器

现在,你已经创建了第一个 HTTP 服务器。虽然目前这是一个非常基本的服务器,但请记住,HTTP 服务器只是一系列请求和响应。

因此,在最简单的形式中,你的 Web 应用程序将执行此操作。也就是说,处理请求并返回响应。

ExpressJS 简介

虽然 NodeJS 允许我们创建自己的 HTTP 服务器,但要创建真正的 Web 应用程序,我们必须编写数百甚至数千行代码来处理所有可能性和所有异常。

幸运的是,有几个 NodeJS 库/框架可以为我们完成这项工作。

最受欢迎的是 ExpressJSExpressJS 是一个使用 NodeJS 设计的框架,旨在大大简化 Web 应用程序开发。

因此我们稍后将详细介绍如何在我们的 NodeJS 应用程序中使用 ExpressJS


相关文章: