Node.js 简介
Node.js 是一个开源的跨平台 JavaScript 运行环境。它是几乎任何类型项目的流行工具!
Node.js 运行 V8 JavaScript 引擎,这是 Google Chrome 的核心,它在浏览器之外运行。这使得 Node.js 具有非常高的性能。
一个 Node.js 应用在一个单进程中运行,不会为每个请求创建一个新的线程。Node.js 在其标准库中提供了一组异步 I/O 原语,可以防止 JavaScript 代码阻塞,通常情况下,Node.js 中的库都是使用非阻塞范式编写的,使阻塞行为成为例外而不是常态。
当 Node.js 执行 I/O 操作(例如从网络读取、访问数据库或文件系统)时,它不会阻塞线程并浪费 CPU 周期等待,而是在响应返回时恢复操作。
这允许 Node.js 使用单个服务器处理数千个并发连接,而无需承担管理线程并发的负担,这可能是错误的重要来源。
Node.js 具有独特的优势,因为数百万编写浏览器 JavaScript 的前端开发人员现在能够编写服务器端代码以及客户端代码,而无需学习完全不同的语言。
在 Node.js 中,可以使用新的 ECMAScript 标准而不会出现问题,因为您不必等待所有用户更新他们的浏览器——您可以通过更改 Node.js 版本来决定使用哪个 ECMAScript 版本,您还可以通过使用标志运行 Node.js 来启用特定的实验性功能。
一个 Node.js 应用示例
最常见的 Node.js “Hello World” 例子是一个 Web 服务器:
import { createServer } from 'node:http'
const hostname = '127.0.0.1'
const port = 3000
const server = createServer((req, res) => {
res.statusCode = 200
res.setHeader('Content-Type', 'text/plain')
res.end('Hello World')
})
server.listen(port, hostname, () => {
console.log(`Server running at http://${hostname}:${port}/`)
})
要运行此代码片段,请将其保存为 server.js
文件,然后在您的终端中运行 node server.js
。如果您使用的是代码的 mjs 版本,则应将其保存为 server.mjs
文件,并在终端中运行 node server.mjs
。
这段代码首先包含 Node.js 的 http 模块。
Node.js 有一个很棒的 标准库,包括对网络的一流支持。
http
的 createServer()
方法创建一个新的 HTTP 服务器并返回它。
服务器设置为监听指定的端口和主机名。当服务器就绪时,回调函数被调用,在本例中通知我们服务器正在运行。
每当收到新的请求时,都会调用 request 事件,提供两个对象:一个请求(一个 http.IncomingMessage
对象)和一个响应(一个 http.ServerResponse
对象)。
这两个对象对于处理 HTTP 调用至关重要。
第一个提供请求详细信息。在这个简单的例子中,没有用到它,但是您可以访问请求头和请求数据。
第二个用于向调用者返回数据。
在本例中,使用:
res.setHeader('Content-Type', 'text/plain')
我们将 statusCode 属性设置为 200,以指示成功响应。
我们设置 Content-Type 头:
res.setHeader('Content-Type', 'text/plain')
我们关闭响应,并将内容作为参数添加到 end()
:
res.end('Hello World')
这会将响应发送给客户端。