MST

星途 面试题库

面试题:Node.js Express 应对复杂场景下 CORS 跨域及性能优化

在高并发的 Node.js Express 应用中,存在多种不同类型的 API 接口,部分接口有严格的跨域访问限制,同时要保证整体性能不受影响。请阐述你针对这种复杂场景下解决 CORS 跨域问题的完整策略,包括但不限于中间件的选择、配置方式以及如何结合缓存机制等优化性能。
37.8万 热度难度
前端开发Node.js

知识考点

AI 面试

面试题答案

一键面试

1. 中间件选择

  • cors 中间件:这是 Node.js 中处理 CORS 问题的常用中间件。它简单易用,能够快速为 Express 应用配置跨域策略。

2. 配置方式

  • 基本配置:在 Express 应用中引入 cors 中间件,示例代码如下:
const express = require('express');
const cors = require('cors');
const app = express();

// 允许所有来源访问所有接口(不推荐用于生产环境)
app.use(cors());

// 允许特定来源访问
const whitelist = ['http://example.com', 'https://example.com'];
const corsOptions = {
  origin: function (origin, callback) {
    if (whitelist.indexOf(origin)!== -1 ||!origin) {
      callback(null, true);
    } else {
      callback(new Error('Not allowed by CORS'));
    }
  }
};
app.use(cors(corsOptions));
  • 针对不同接口配置:如果部分接口有严格的跨域限制,可以对特定路由使用不同的 CORS 配置。例如:
const apiRouter = express.Router();
apiRouter.get('/strict - cors - route', cors({
  origin: 'http://specific - allowed - origin.com'
}), (req, res) => {
  res.send('This is a strict CORS route');
});
app.use('/api', apiRouter);

3. 结合缓存机制优化性能

  • 客户端缓存:在响应头中设置合适的缓存控制字段,如 Cache - Control。对于不常变化的 API 响应,可以设置较长的缓存时间。例如:
app.get('/static - data - api', (req, res) => {
  res.set('Cache - Control','public, max - age = 3600'); // 缓存1小时
  res.send('Static data');
});
  • 服务器端缓存:使用内存缓存(如 node - cache)或分布式缓存(如 Redis)。对于高并发且数据相对稳定的 API 接口,在服务器端缓存响应数据。示例使用 node - cache
const NodeCache = require('node - cache');
const myCache = new NodeCache();

app.get('/cached - api', async (req, res) => {
  const cacheKey = req.originalUrl;
  const cachedData = myCache.get(cacheKey);
  if (cachedData) {
    return res.send(cachedData);
  }
  // 这里假设 getDataFromDB 是从数据库获取数据的异步函数
  const data = await getDataFromDB();
  myCache.set(cacheKey, data);
  res.send(data);
});

通过合理配置 CORS 中间件,并结合缓存机制,可以在保证跨域访问限制的同时,提升高并发 Node.js Express 应用的整体性能。