模块的概念
Node.js 运行在 V8 JavaScript 引擎上,通过 require()
函数导入相关模块来处理服务器端的各种进程。一个 Node.js 模块可以是一个函数库、类集合或其他可重用的代码,通常存储在一个或多个 .js 文件中。
例如,启动一个 Node.js 服务器时,我们需要导入 http
模块:
const http = require('http');
const server = http.createServer((req, res) => {
res.writeHead(200, {'Content-Type': 'text/plain'});
res.end('Hello World\n');
});
server.listen(3000, () => {
console.log('Server running at http://localhost:3000/');
});
模块的类型
Node.js 中的模块主要分为三种类型:
第三方模块
这些模块由独立开发者开发,并在 NPM 仓库中提供使用。要在项目中使用这些模块,需要先在全局或项目文件夹中安装它们。
例如,安装 Express 模块:
npm install express
使用 Express 模块:
const express = require('express');
const app = express();
app.get('/', (req, res) => {
res.send('Hello World!');
});
app.listen(3000, () => {
console.log('Example app listening on port 3000!');
});
内置模块
Node.js 运行时软件自带了一些核心模块,如 http
、fs
、console
等。这些模块无需安装,但使用时仍需要通过 require()
函数导入(除了少数全局对象如 process
、buffer
和 console
)。
例如,使用 fs
模块读取文件:
const fs = require('fs');
fs.readFile('example.txt', 'utf8', (err, data) => {
if (err) throw err;
console.log(data);
});
本地模块
本地模块是你自己创建的 .js 文件,其中包含了你的应用程序所需的函数或类的定义。这些模块位于你的 Node.js 应用程序文件夹中,同样需要通过 require()
函数导入。
每个 .js 文件都有一个特殊的 module
对象,其 exports
属性用于向外部代码暴露特定的函数、对象或变量。
例如,创建一个名为 functions.js
的本地模块:
// functions.js
exports.power = (x, y) => Math.pow(x, y);
exports.squareRoot = x => Math.sqrt(x);
exports.log = x => Math.log(x);
在主应用程序中使用这个本地模块:
const mathFunctions = require('./functions');
console.log(mathFunctions.power(2, 3)); // 输出: 8
console.log(mathFunctions.squareRoot(16)); // 输出: 4
console.log(mathFunctions.log(10)); // 输出: 2.302585092994046
通过使用模块,我们可以将 Node.js 应用程序的功能分割成更小、更易管理的部分,提高代码的可读性和可维护性。