5. util
模块
提供一些常用的实用函数,包括继承、类型判断等功能。
const util = require('util');
util
模块是 Node.js 的内置模块之一,提供了一些实用函数的集合,用于辅助开发者进行常见的功能操作。util
模块包含了各种实用函数的集合,方便开发者编写高效、可维护的代码。
下面我们来详细讲解一些 util
模块中常用的功能:
1. 继承
util
模块提供了一个 inherits
函数,用于实现对象间的继承关系。这个函数可以将一个构造函数从一个原型继承到另一个构造函数的原型链上。使用方法如下:
const util = require('util'); function Parent() { this.name = 'Parent'; } Parent.prototype.sayHello = function() { console.log('Hello!'); }; function Child() { this.name = 'Child'; } util.inherits(Child, Parent); const child = new Child(); child.sayHello(); // 输出 'Hello!'
在上述代码中,我们定义了一个 Parent
构造函数和一个 Child
构造函数。然后,使用 util.inherits
函数将 Child
构造函数继承自 Parent
构造函数。继承后,Child
对象就可以使用 Parent
原型链上的属性和方法。
2. 促进回调函数的使用
util
模块提供了一些函数,可以帮助处理回调函数的调用和处理。下面是一些常用的函数:
2.1 promisify
promisify
函数将一个基于回调的异步函数转换为返回 Promise
的函数。
const util = require('util'); const fs = require('fs'); const readFile = util.promisify(fs.readFile); readFile('file.txt', 'utf8') .then(data => { console.log(data); }) .catch(error => { console.error(error); });
在上述代码中,我们使用 promisify
函数将 Node.js 内置的 fs.readFile
函数转换为返回 Promise
的函数 readFile
。这样,我们就可以使用 async/await
或 Promise
语法处理异步操作。
2.2 callbackify
callbackify
函数将返回 Promise
的函数转换为接受回调函数的函数。
const util = require('util'); const fs = require('fs'); const readFileAsync = util.promisify(fs.readFile); const readFileCallback = util.callbackify(readFileAsync); readFileCallback('file.txt', 'utf8', (error, data) => { if (error) { console.error(error); } else { console.log(data); } });
在上述代码中,我们首先使用 promisify
函数将 fs.readFile
函数转换为返回 Promise
的函数 readFileAsync
。然后,使用 callbackify
函数将其转换为接受回调函数的函数 readFileCallback
。这样,我们就可以继续使用回调函数风格的编程方式。
3. 类型判断和错误处理
3.1 util.inspect
util.inspect
方法返回一个对象的字符串表示,通常用于调试和日志输出。
const util = require('util'); const obj = { name: 'John', age: 30 }; console.log(util.inspect(obj)); // 输出 "{ name: 'John', age: 30 }"
在上述代码中,我们使用 util.inspect
方法将 obj
对象转换为字符串并输出。
3.2 util.types.is
util.types
提供了一系列函数,用于检查 JavaScript 内置类型的实例。
const util = require('util'); console.log(util.types.isDate(new Date())); // true console.log(util.types.isRegExp(/abc/)); // true console.log(util.types.isError(new Error())); // true
在上述代码中,util.types.isDate
函数用于检查是否为 Date
实例,util.types.isRegExp
函数用于检查是否为正则表达式实例,util.types.isError
函数用于检查是否为错误对象实例。
3.3 util.throwDeprecation
util.throwDeprecation
方法用于抛出一个废弃警告错误。
const util = require('util'); if (someCondition) { util.throwDeprecation('This feature is deprecated'); }
在上述代码中,当满足某个条件时,我们可以使用 util.throwDeprecation
方法抛出一个废弃警告错误。
这些只是 util
模块的一部分功能,还有其他实用函数可以了解和使用。通过使用 util
模块,开发者可以更加高效地处理继承、回调函数、类型判断和错误处理等常见任务。
6. express
模块
一个流行的 Web 框架,简化了 Node.js Web 应用程序的开发过程。
const express = require('express');
express
是一个流行的基于 Node.js 的 Web 应用框架,它简化了开发 Web 应用程序的过程。使用 express
可以快速构建出具有路由、中间件和模板引擎等功能的 Web 应用。
下面我们来详细讲解 express
模块的一些常用功能:
1. 创建 Express 应用
首先,我们需要通过 require
函数引入 express
模块,并创建一个 Express 应用实例。
const express = require('express'); const app = express();
在上述代码中,我们使用 require
函数引入 express
模块,并将其赋值给变量 express
。然后,调用 express
函数创建一个 Express 应用实例,并将其赋值给变量 app
。
2. 定义路由
Express 使用路由来处理客户端请求。通过定义不同的路由,我们可以映射不同的 URL 路径到相应的处理函数上。
app.get('/', (req, res) => { res.send('Hello, World!'); }); app.post('/users', (req, res) => { // 处理创建用户的逻辑 });
在上述代码中,我们使用 app.get
方法定义了一个处理 GET 请求的路由,它将根路径 /
映射到一个回调函数上。当客户端发送一个 GET 请求到根路径时,服务器将会执行回调函数,并通过 res.send
将响应发送给客户端。
同样地,我们可以使用 app.post
方法定义一个处理 POST 请求的路由,将路径 /users
映射到一个处理创建用户逻辑的回调函数上。
Express 还支持其他 HTTP 方法的路由处理,例如 app.put
用于处理 PUT 请求,app.delete
用于处理 DELETE 请求,以及 app.all
用于处理所有方法的请求。
3. 中间件
Express 的中间件允许我们在处理请求和发送响应之间执行一些操作。这些操作可以是验证请求、处理请求数据、记录日志等。
app.use(express.json()); app.use(express.urlencoded({ extended: true })); app.use(loggerMiddleware);
在上述代码中,我们通过调用 app.use
方法来注册中间件。express.json
中间件用于解析请求的 JSON 数据,express.urlencoded
中间件用于解析请求的 URL 编码数据。loggerMiddleware
是一个自定义的日志记录中间件。
中间件函数接受三个参数:req
(请求对象)、res
(响应对象)和 next
(下一个中间件函数)。中间件函数可以修改请求和响应对象,或者将控制权传递给下一个中间件函数。
4. 静态文件服务
Express 具有内置的中间件函数 express.static
,用于提供静态文件服务。
app.use(express.static('public'));
在上述代码中,我们通过调用 app.use
方法使用 express.static
中间件函数,将 public
目录下的静态文件提供给客户端。当客户端请求一个静态文件时,Express 将会在 public
目录下寻找该文件并返回给客户端。
5. 使用模板引擎
Express 支持多种模板引擎,例如 ejs
、pug
、handlebars
等。我们可以使用模板引擎来渲染动态页面。
app.set('view engine', 'ejs'); app.get('/users', (req, res) => { const users = ['Alice', 'Bob', 'Charlie']; res.render('users', { users }); });
在上述代码中,我们通过调用 app.set
方法设置模板引擎为 ejs
。然后,使用 res.render
方法渲染名为 users
的模板,并传递一个包含用户数据的上下文对象。
模板文件可以放在指定的模板目录中,默认是在项目根目录下的 views
目录。在模板文件中,可以使用模板引擎的语法和标记来动态地生成 HTML 内容。
这些只是 express
模块的一部分功能,还有许多其他的功能和功能组件可以使用。通过使用 express
模块,开发者可以快速构建出具有路由、中间件、静态文件服务和模板引擎等功能的 Web 应用。