Node.js 简介
最后修改于 2023 年 10 月 18 日
Node.js 教程是一个介绍 Node.js 的教程。我们描述了 Node.js 并提供了一些 Node.js 代码示例。
Nojde.js
Node.js 是一个开源的、跨平台的 JavaScript 运行时环境。它基于 Chrome 的 V8 JavaScript 引擎构建。Node.js 使用事件驱动的、非阻塞 I/O 模型,这使得它轻量且高效。Node.js 最初由 Ryan Dahl 于 2009 年编写。
Node.js 提供了丰富的各种 JavaScript 模块库,例如用于处理文件系统的 fs
模块,或用于处理 HTTP 请求和响应的 http
模块。
Node.js 应用程序使用 JavaScript 编写,可以在 OS X、Microsoft Windows 和 Linux 上的 Node.js 运行时中运行。
Node.js 有一个包管理器,名为 npm
,它是一个巨大的开源 JavaScript 库生态系统。
Node.js 安装
我们安装最新版本的 Node.js。请按照 Node.js 网站上针对您的平台的安装说明进行操作。
Node.js 第一个例子
我们创建一个简单的控制台应用程序。
console.log("This is our first application");
程序将消息打印到控制台。
$ node first.js This is our first application
Node.js 读取文件内容
Node.js 包含 fs
模块来处理文件。
blue book pen dog computer screen
我们有一个文本文件。
Node.js 中的大多数函数都是异步的。它们是非阻塞的;也就是说,它们不会阻止脚本的执行。
const fs = require('fs') fs.readFile('words.txt', 'utf-8', (err, data) => { if (err) throw err; console.log(data); }); console.log("Script continues...")
该示例读取 words.txt
文件的内容。
const fs = require('fs');
我们加载 fs
模块。
fs.readFile('words.txt', 'utf-8', (err, data) => {
readFile
异步读取文件的全部内容。我们在方法的第二个参数中指定编码。
$ node read_file.js Script continues blue book pen dog computer screen
“脚本继续”在文件内容之前显示。
Node.js 同步读取目录
现在我们将读取目录的内容。
const fs = require('fs'); readDirContentSync('.'); console.log("Ready."); function readDirContentSync(mydir) { const filenames = fs.readdirSync(mydir); for (var i = 0; i < filenames.length; i++) { console.log(filenames[i]); } }
代码示例同步读取目录的内容。
const filenames = fs.readdirSync(mydir);
我们使用 readdirSync
同步读取目录。
for (var i = 0; i < filenames.length; i++) { console.log(filenames[i]); }
我们循环遍历文件名数组并将它们打印到控制台。
$ node readdir_syn.js builtins.js first.js links read_file.js readdir_asyn.js readdir_syn.js server.js todo words.txt Ready.
使用同步函数调用,“就绪”消息在函数执行完成后显示。
Node.js 异步读取目录
在下一个示例中,我们异步读取目录。
var fs = require('fs'); fs.readdir(".", (err, filenames) => { for (var i = 0; i < filenames.length; i++) { console.log(filenames[i]); } console.log("Ready."); });
readdir
异步读取当前工作目录的内容。它用目录中文件的名称填充一个数组,不包括 '.' 和 '..'。
Node.js 读取网页
在下面的示例中,我们使用内置的 http
模块读取网页。
const http = require('http'); const request = http.request({ hostname: 'webcode.me' }, (res) => { res.setEncoding('utf8'); res.on('data', (chunk) => { console.log(chunk); }); }); request.end(); request.on('error', (err) => { console.log("Error occured\n"); console.error(err); });
在示例中,我们使用 http
模块创建一个对小型网页的请求。返回的 HTML 页面将打印到控制台。
$ node read_webpage.js <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>My html page</title> </head> <body> <p> Today is a beautiful day. We go swimming and fishing. </p> <p> Hello there. How are you? </p> </body> </html>
我们收到了这个小型 HTML 页面。
Node.js 使用 npm 安装模块
可以使用 npm
(Node 包管理器)安装其他模块。现在我们将安装一个名为 builtin-modules
的新模块。使用此模块,我们将列出所有可用的 Node.js 内置模块。
$ mkdir builtmodtest $ cd builtmodtest/ $ npm init
我们创建一个新的项目目录。使用 npm init
命令,我们创建一个 package.json
文件。它包含与项目相关的元数据,例如应用程序名称、作者或依赖项。
$ cat package.json { "name": "builtmodtest", "version": "1.0.0", "description": "Testing builtin modules", "main": "main.js", "scripts": { "start": "node main.js" }, "author": "Jan Bodnar", "license": "ISC" }
这是初始的 package.json
文件。我们选择 main.js
作为主文件。
$ npm install builtin-modules $ tree -L 1 . ├── main.js ├── node_modules ├── package.json └── package-lock.json
使用 npm install builtin-modules
,我们本地安装了 builtin-modules
模块。将创建一个新的 node_modules
目录,其中存储模块及其依赖项。npm 自动创建了 package-lock.json
文件。它用于确保团队成员、部署和持续集成的依赖项安装一致。此文件必须提交到源代码存储库中。
$ cat package.json { "name": "builtmodtest", "version": "1.0.0", "description": "Testing builtin modules", "main": "main.js", "scripts": { "start": "node main.js" }, "author": "Jan Bodnar", "license": "ISC", "dependencies": { "builtin-modules": "^2.0.0" } }
builtin-modules
也写入到 package.json
文件中。
const builtmods = require('builtin-modules'); console.log(builtmods);
这是 main.js
文件。它将所有内置模块打印到控制台。
$ npm start > builtmod@1.0.0 start /home/janbodnar/prog/nodejs/builtmod > node main.js [ 'assert', 'async_hooks', 'buffer', 'child_process', 'cluster', 'config', 'console', 'constants', ... ]
Node.js 服务器
我们使用 Node.js http
模块创建一个简单的服务器。
const http = require('http'); const server = http.createServer((req, res) => { res.writeHead(200, {"Content-Type": "text/plain"}); res.end("Hello there\n"); }); server.listen(8000); console.log("Server running at http://127.0.0.1:8000/");
服务器向客户端发送一个简单的文本消息。
const http = require('http');
我们加载 http
模块以创建 http 服务器。
const server = http.createServer((req, res) => { res.writeHead(200, {"Content-Type": "text/plain"}); res.end("Hello there\n"); });
创建了一个服务器。它向客户端发送一条文本消息。
server.listen(8000);
服务器在本地主机上的 8000 端口上监听。
$ node server.js & $ curl localhost:8000 Hello there
我们运行服务器并使用 curl
创建一个请求。
来源
在本文中,我们介绍了 Node.js。我们使用 Node.js 创建了一些代码示例。