在Node.js中,动态设置CORS选项可以让你根据不同的条件(如请求的来源、路径等)来调整CORS策略。这可以通过创建一个自定义的CORS配置函数来实现,然后将这个函数传递给cors
中间件。以下是如何动态设置CORS选项的步骤:
-
安装
cors
模块: 如果你还没有安装cors
模块,可以通过npm来安装:bash
npm install cors
-
创建自定义CORS配置函数: 你可以创建一个函数,该函数接受请求对象(
req
)和回调函数(callback
),并根据请求的特定条件来动态设置CORS选项。javascript
const cors = require('cors'); const express = require('express'); const app = express(); // 自定义CORS配置函数 const corsOptionsDelegate = (req, callback) => { let corsOptions; // 根据请求的来源或其他条件动态设置CORS选项 if (req.header('Origin') === 'https://www.us87.com') { corsOptions = { origin: true, credentials: true }; } else { corsOptions = { origin: false }; } // 调用回调函数,传递CORS选项 callback(null, corsOptions); }; // 应用自定义CORS配置 app.use(cors(corsOptionsDelegate)); app.get('/', (req, res) => { res.json({ message: 'This is a CORS-enabled response!' }); }); app.listen(3000, () => { console.log('Server is running on port 3000'); });
在这个例子中,corsOptionsDelegate
函数检查请求头中的Origin
字段,并根据请求的来源设置不同的CORS选项。如果请求来自https://www.us87.com
,则允许该来源的跨域请求并允许凭据;否则,不允许跨域请求。
-
处理预检请求:
cors
中间件会自动处理OPTIONS预检请求,并根据你提供的CORS选项返回适当的响应。 -
应用到特定路由: 如果你只想对特定的路由应用自定义的CORS配置,可以将
cors
中间件应用到特定的路由上,而不是全局应用。javascript
app.get('/specific-endpoint', cors(corsOptionsDelegate), (req, res) => { res.json({ message: 'This is a CORS-enabled response for a specific endpoint!' }); });
通过这种方式,你可以根据不同的条件动态调整CORS策略,提供更灵活的跨域资源共享控制。