Express 编写中间件

预计阅读时间1 分 126 views

概述

中间件在 Express 中是非常重要的概念。简单来说,它们就是具有访问请求对象(req)、响应对象(res)和下一个函数(通常表示为next)权限的函数。中间件可以执行各种任务,比如执行代码、修改请求和响应对象,或者结束请求-响应循环。

在 Express 中,当收到请求时,它会按照定义的顺序依次调用中间件。每个中间件都可以决定是否继续传递请求给下一个中间件,如果要继续,就调用next()函数,否则请求处理过程将在当前中间件结束。如果没有中间件结束请求-响应循环,Express 就会一直等待,直到服务器关闭或者发送响应为止。

中间件函数的元素

一个中间件函数通常由以下几个元素组成:

异步中间件

从Express 5开始,中间件函数可以返回Promise。当Promise被拒绝或函数抛出错误时,Express会自动调用next(value),其中value是拒绝的原因或抛出的错误。这使得异步操作的处理更加简洁和直观。

示例

下面是一个简单的Express应用程序示例,其中包含了几个中间件函数:

const express = require('express');  
const app = express();  
  
// myLogger中间件,记录请求日志  
const myLogger = (req, res, next) => {  
  console.log('LOGGED:', req.method, req.url);  
  next();  
};  
  
// requestTime中间件,记录请求时间戳  
const requestTime = (req, res, next) => {  
  req.requestTime = Date.now();  
  next();  
};  
  
// validateCookies中间件,验证cookie的有效性  
const validateCookies = (req, res, next) => {  
  const userToken = req.cookies.userToken;  
  if (!userToken || userToken !== 'valid_token') {  
    return res.status(401).send('Unauthorized: Invalid or missing user token');  
  }  
  next();  
};  
  
// 应用中间件  
app.use(myLogger);  
app.use(requestTime);  
app.use(validateCookies);  
  
// 根路由处理函数  
app.get('/', (req, res) => {  
  const responseText = `Hello World! Requested at: ${new Date(req.requestTime).toISOString()}`;  
  res.send(responseText);  
});  
  
// 监听端口  
app.listen(3000, () => {  
  console.log('Server is running on port 3000');  
});

在这个示例中,我们定义了三个中间件函数:myLoggerrequestTimevalidateCookies,并将它们应用到了整个应用程序上。然后,我们定义了一个根路由处理函数,并在其中使用了由requestTime中间件添加到请求对象上的requestTime属性。

分享此文档

Express 编写中间件

或复制链接

本页目录