豫ICP备2024044691号-1
powered by emlog
一个灵活的 express 跨域中间件
Mins 2025-02-10 nodejs

在 Web 开发中,跨域资源共享(CORS)是一个常见且重要的需求。本文将介绍如何使用 Node.js 和 Express 框架实现一个灵活的跨域中间件。

中间件功能概述

这个跨域中间件主要实现了以下功能:

  • 处理 OPTIONS 预检请求
  • 根据配置动态控制跨域访问
  • 支持自定义的跨域名称验证

代码实现

import appConfig from "../../app.config.js";

// Access-Control-Allow-xxx: * 替换成实际IP地址
export default (request, response, next) => {
    if (request.method === 'OPTIONS') {
        response.header('Access-Control-Allow-Headers', '*');
        response.header('Access-Control-Allow-Methods', '*');
        response.header('Access-Control-Allow-Origin', '*');
        return response.status(200).send('');
    } else {
        if (appConfig.server.cors.enable && appConfig.server.cors.allowNames.includes(request.header('x-cors-name'))) {
            response.header('Access-Control-Allow-Headers', '*');
            response.header('Access-Control-Allow-Methods', '*');
            response.header('Access-Control-Allow-Origin', '*');
        }
    }
    next();
}

关键点解析

  1. OPTIONS请求处理
    对于 OPTIONS 预检请求,中间件会直接返回 200 状态码,并设置允许所有头信息、方法和来源。

  2. 配置驱动
    通过 appConfig 来动态控制跨域功能是否启用,这使得我们可以在不同环境中灵活配置。

  3. 自定义验证
    使用 x-cors-name 请求头来验证请求来源,只有配置中允许的名称才能通过验证。

使用场景

这个中间件特别适合以下场景:

  • 需要严格控制的跨域访问
  • 多个前端应用访问同一个后端服务
  • 需要根据环境动态开启/关闭跨域功能

总结

通过这个中间件,我们可以实现一个灵活且安全的跨域解决方案。它不仅支持标准的 CORS 处理,还提供了额外的安全控制层,使得我们的 API 服务更加健壮。