面试题答案
一键面试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 应用的整体性能。