使用 Node.js 创建 HTTP Web 服务器 Code 例如:
⚡ 智能摘要
Node.js 使用内置的 http 模块,只需几行代码即可构建一个可用的 Web 服务器。该服务器监听指定的端口,并向每个请求返回状态码和响应体,同时,另一段代码会从其他网站获取数据。

此 Node.js 该框架主要用于创建基于服务器的应用程序。它可以轻松构建为用户提供内容的 Web 服务器。
多个模块处理与服务器相关的请求,内置模块 http 其中最重要的模块是Node.js。我们将学习如何使用Node.js创建一个基本的Web服务器应用程序,以及如何从另一个网站请求数据。
使用 HTTP 作为 Web 服务器的 Node
让我们来看一个如何创建和运行第一个Node.js应用程序的例子。
该应用程序创建了一个简单的服务器模块,监听 7000 端口。当浏览器向该端口发出请求时,服务器会发送一个响应。 你好世界 回复客户。
Code 说明
- 此
require函数读取一个 JavaScript 它加载文件,执行该文件,并返回其导出对象。这里它加载http该模块使其功能在应用程序中可用。 - 服务器应用程序由一个简单的函数构成。每次有请求到达服务器时,该函数都会运行。
- 当收到请求时,会发送状态为“已发送”的响应。 200这是 HTTP 标头中表示成功响应的标准状态码。
- 响应体本身就是一个字符串 你好世界.
server.listen使应用程序监听端口 7000 上的客户端请求。可以使用任何可用的端口。
如果命令运行成功,浏览器中将显示以下输出。
输出
输出结果如下:
- 浏览本地主机 URL 端口 7000 显示字符串 你好世界 在页面中。
- 因为代码指定了端口 7000,所以只有通过浏览器访问该端口时才能看到输出。
以下是参考代码:
var http = require('http'); var server = http.createServer(function(request, response) { response.writeHead(200, { "Content-Type": "text/plain" }); response.end("Hello World\n"); }); server.listen(7000);
在 Node.js 中处理 GET 请求
在 Node.js 中,使用 GET 请求从另一个站点检索数据非常简单。过去,这需要…… request 通过命令行安装的模块:
npm install request
该命令会指示 Node 包管理器下载并安装所需的模块。安装成功后,命令行会以如下形式显示已安装的模块名称和版本: <name>@<version>.
在上面的截图中, request 模块及其版本号已下载并安装。
Code 说明
- 此
request上一步安装的模块提供了向网站发出 GET 请求所需的功能。 - 向网站发出 GET 请求,并在收到响应后执行回调函数。回调函数接收三个参数:
- 误差 — 记录发出请求时出现的任何错误。
- 响应 — 包含响应返回的 HTTP 标头。
- Body — 包含响应的全部内容。
- 接收到的内容
body参数会输出到控制台。
以下是参考代码:
var request = require("request"); request("https://example.com", function(error, response, body) { // Always check the error parameter before using the body if (error) { console.error("Request failed:", error.message); return; } console.log(body); });
⚠️ 弃用通知: 这个 request 模块是 已于2020年2月完全弃用 并且不再收到任何更新。它仍然可以安装和运行,因此上面的示例对于现有项目仍然有效,但是 npm install request 现在会打印弃用警告。新代码应该使用内置函数。 fetch 函数将在下一节中展示。
如何在Node.js中使用原生fetch发送HTTP请求
Node 包含了一个全局 fetch 自版本 18 起新增此功能,与浏览器已提供的 API 相匹配。无需安装任何软件包,并且该函数返回一个 Promise,因此可以直接使用。 async/await.
// No require and no npm install needed on Node 18 or later async function getData() { try { const response = await fetch("https://example.com"); // fetch does NOT reject on 404 or 500 — check ok yourself if (!response.ok) { throw new Error("HTTP status " + response.status); } const body = await response.text(); console.log(body); } catch (err) { // Network failures and the throw above both land here console.error("Request failed:", err.message); } } getData();
与回调式编程风格相比,有三点值得注意。首先, fetch 仅在网络级别故障时才会拒绝;HTTP 404 或 500 错误仍然能够成功解析,这就是为什么 response.ok 检查机制的存在以及为什么忽略它是从...迁移时最常见的错误 request其次,身体本身并不包含回应——它必须被明确地解读。 response.text() 纯文本或 response.json() 对于 JSON 来说,每个 JSON 对象都会返回一个 Promise。第三,由于整个调用都是基于 Promise 的,因此单个 Promise 对象只需处理一个 Promise 对象即可。 try/catch 同时涵盖请求和读取的正文,完全取代了错误优先回调参数。
对于必须在 Node 16 或更早版本上运行的脚本,请安装 node-fetch or axios 相反,因为两者都提供了类似的基于 Promise 的接口,并且运行时升级后只需要更改导入行即可。
request、fetch 和 axios:该用哪个?
大多数 Node 文档中都会出现三种 HTTP 客户端,但只有一种适合作为新项目的默认客户端。它们在维护状态、是否需要依赖项以及错误状态指示方式等方面存在差异,因此下表对它们进行了对比。
| 方面 | 请求 | 获取(内置) | 爱可信 |
|---|---|---|---|
| 状态 | 自 2020 年起已弃用 | 核心维护 | 积极维护 |
| 安装 | npm 包 | 节点 18+ 上没有 | npm 包 |
| 样式 | 错误优先回调 | 承诺 | 承诺 |
| JSON解析 | 手动输入,或使用 JSON 选项 | 手动通过 response.json() | 自动表 |
| 404 或 500 错误被拒绝 | 没有 | 没有 | 是 |
绝大部分储备使用 fetch 对于基于当前 Node 版本的新项目,由于它不添加任何依赖项,并且与开发者已知的浏览器 API 相匹配,因此请选择。 axios 当自动 JSON 处理、请求拦截器或错误状态拒绝等机制能够节省实际代码时,请保留。 request 仅在已经依赖它并且计划替换它的旧版应用程序中使用。
常见的Node.js服务器错误及其修复方法
首次启动 Node 服务器时,大多数失败都源于端口、路径或缺少响应,而不是服务器代码本身的问题。
- EADDRINUSE: 另一个进程已经占用了该端口。运行
netstat -ano | findstr :7000on Windows 或lsof -i :7000on macOS 如果是 Linux 系统,则停止该进程或选择其他端口。 - 低端口上的 EACCES: 低于 1024 的端口需要更高的权限。开发期间请使用高于 1024 的端口,例如 3000 或 7000。
- 浏览器卡住,始终无法加载: 处理员从未打电话
response.end()连接会一直保持打开状态,直到超时为止,因此通过处理程序的每个路径都必须结束响应。 - 找不到模块“http”: 文件名拼写错误,或者脚本是在浏览器中而不是在 Node.js 环境中运行的。核心模块无需安装。
- 更改未显示: Node.js 在启动时加载一次文件。每次编辑后请重启进程,或者使用监视器(例如 .node)运行它。
node --watch server.js.




