超级实用!详解Node.js中的util模块和express模块

简介: 超级实用!详解Node.js中的util模块和express模块

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/awaitPromise 语法处理异步操作。

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 支持多种模板引擎,例如 ejspughandlebars 等。我们可以使用模板引擎来渲染动态页面。

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 应用。

相关文章
|
5天前
|
开发框架 JavaScript 安全
js开发:请解释什么是Express框架,以及它在项目中的作用。
【4月更文挑战第24天】Express是Node.js的Web开发框架,简化路由管理,支持HTTP请求处理。它包含中间件系统用于日志、错误处理和静态文件服务,集成多种模板引擎如EJS、Jade、Pug。框架还提供安全中间件提升应用安全,并具有良好的可扩展性,便于项目功能扩展和开发效率提升。
26 3
|
5天前
|
JSON JavaScript 前端开发
❤Nodejs 第九章(token身份认证和express-jwt的安装认识)
【4月更文挑战第9天】Node.js第九章介绍了Token身份认证,特别是JWT(JSON Web Token)作为跨域认证的解决方案。JWT由Header、Payload和Signature三部分组成,用于在客户端和服务器间安全传输用户信息。前端收到JWT后存储在localStorage或sessionStorage中,并在请求头中发送。Express-JWT是一个中间件,用于解析JWT。基本用法包括设置secret和algorithms。注意安全问题,避免混合使用不同算法以防止降级攻击。
46 0
|
5天前
|
JavaScript 前端开发 测试技术
编写JavaScript模块化代码主要涉及将代码分割成不同的文件或模块,每个模块负责处理特定的功能或任务
【5月更文挑战第10天】编写JavaScript模块化代码最佳实践:使用ES6模块或CommonJS(Node.js),组织逻辑相关模块,避免全局变量,封装细节。利用命名空间和目录结构,借助Webpack处理浏览器环境的模块。编写文档和注释,编写单元测试以确保代码质量。通过这些方法提升代码的可读性和可维护性。
13 3
|
5天前
|
消息中间件 监控 JavaScript
Node.js中的进程管理:child_process模块与进程管理
【4月更文挑战第30天】Node.js的`child_process`模块用于创建子进程,支持执行系统命令、运行脚本和进程间通信。主要方法包括:`exec`(执行命令,适合简单任务)、`execFile`(安全执行文件)、`spawn`(实时通信,处理大量数据)和`fork`(创建Node.js子进程,支持IPC)。有效的进程管理策略涉及限制并发进程、处理错误和退出事件、使用流通信、谨慎使用IPC以及监控和日志记录,以确保应用的稳定性和性能。
|
5天前
|
开发框架 JavaScript 中间件
深入探索Node.js的Express框架:使用与中间件详解
【4月更文挑战第30天】本文深入探讨了Node.js的Express框架,介绍了其作为Web开发的强大工具,主要聚焦于基本使用和中间件。Express是基于Node.js的Web应用框架,用于构建高效的应用和API。文章详细讲解了如何安装Express,创建简单应用,以及中间件的工作原理和应用,包括中间件的顺序、错误处理和挂载位置。此外,还提到了使用第三方中间件扩展功能。理解Express基础和中间件对于开发高质量Web应用至关重要。
|
5天前
|
缓存 JavaScript 前端开发
Node.js的模块系统:CommonJS模块系统的使用
【4月更文挑战第29天】Node.js采用CommonJS作为模块系统,每个文件视为独立模块,通过`module.exports`导出和`require`引入实现依赖。模块有独立作用域,保证封装性,防止命名冲突。引入的模块会被缓存,提高加载效率并确保一致性。利用CommonJS,开发者能编写更模块化、可维护的代码。
|
5天前
|
JavaScript API
node.js之模块系统
node.js之模块系统
|
5天前
|
JavaScript 中间件 API
node.js之express的基础知识
node.js之express的基础知识
|
5天前
|
存储 JavaScript 数据库
nodejs中express框架实现增删改查接口
nodejs中express框架实现增删改查接口
|
5天前
|
开发框架 JSON JavaScript
Node.js教程-express框架
Node.js教程-express框架
42 1