MST

星途 面试题库

面试题:Node.js Express框架中中间件的作用及应用场景

请阐述在Node.js的Express框架里,中间件的主要作用是什么?并列举至少两个常见的应用场景,同时说明如何自定义一个中间件。
44.2万 热度难度
前端开发Node.js

知识考点

AI 面试

面试题答案

一键面试

中间件主要作用

  1. 请求处理:在请求到达最终路由处理程序之前,对请求进行预处理,比如解析请求体、验证请求参数等。
  2. 响应处理:在路由处理程序生成响应后,对响应进行后处理,例如添加响应头、格式化响应数据。
  3. 功能复用:将一些通用的功能(如日志记录、错误处理)提取出来,通过中间件复用,提高代码的可维护性和可扩展性。

常见应用场景

  1. 日志记录:记录每一个请求的相关信息,如请求方法、URL、时间等,方便调试和排查问题。例如使用 morgan 中间件,它可以将请求日志打印到控制台。
  2. 身份验证:验证用户是否有权限访问特定的路由。比如在用户访问需要登录才能操作的页面或接口时,检查用户的登录状态(例如通过检查 cookietoken)。
  3. 错误处理:捕获在请求处理过程中抛出的错误,并进行统一的处理,返回合适的错误信息给客户端。

自定义中间件

在 Express 中自定义中间件非常简单,中间件本质上就是一个函数,该函数接受 (req, res, next) 三个参数。

// 自定义一个简单的日志记录中间件
const logger = function(req, res, next) {
    console.log(`${req.method} ${req.url} at ${new Date()}`);
    next();
};

// 使用自定义中间件
const express = require('express');
const app = express();
app.use(logger);

// 路由等其他代码
app.get('/', (req, res) => {
    res.send('Hello World!');
});

const port = 3000;
app.listen(port, () => {
    console.log(`Server running on port ${port}`);
});

上述代码中,logger 就是一个自定义中间件,通过 app.use(logger) 将其挂载到 Express 应用中。next() 函数用于将控制权传递给下一个中间件或路由处理程序。如果在中间件函数中没有调用 next(),请求将不会被进一步处理。