在 Express/Node 应用程序中比较/实现 `app.use(cors(corsOptions));` 和 `app.options('*', cors(corsOptions));`

Posted

技术标签:

【中文标题】在 Express/Node 应用程序中比较/实现 `app.use(cors(corsOptions));` 和 `app.options(\'*\', cors(corsOptions));`【英文标题】:Comparing/Implementing `app.use(cors(corsOptions));` and `app.options('*', cors(corsOptions));` in Express/Node Application在 Express/Node 应用程序中比较/实现 `app.use(cors(corsOptions));` 和 `app.options('*', cors(corsOptions));` 【发布时间】:2019-03-27 07:01:06 【问题描述】:

我是在 Node/Express 应用程序中实现 CORS(为所有人启用)的新手。我在app.js 中找到了一段代码,如下所述:

const express = require('express');
const corsOptions = 
  origin: '*',
;
const app = express();
app.use(cors(corsOptions));
app.options('*', cors(corsOptions));
app.listen(config.PORT);

我发现最后两行代码是多余的。我不确定,因为运行 Node/Express 项目的知识/理解和资源有限,我现在无法测试 CORS。

如果我们提及app.use(cors(corsOptions));app.options('*', cors(corsOptions));就足够了吗? 如果是,它们的实施是否有区别? 如果否,每行代码如何配置 Express 应用程序?

【问题讨论】:

【参考方案1】:

是的,options() 的作用完全相同,但仅适用于请求路径 * 和 http OPTIONS 请求。

use() 不会关心请求的动词,但如果需要,可以将请求路径作为第一个参数。

【讨论】:

“http OPTIONS请求”是什么意思?我想你的意思是 corsOptions,不是吗? 这是另一种类型的请求,例如 GET、POST 等。要查看是否为服务启用了 Cors,通常会发送 OPTIONS 类型的“飞行前”请求。它期望一些 Cors 头回来。但是,如果您希望所有请求都可以从另一个域访问,则应将其添加到所有类型的请求中。

以上是关于在 Express/Node 应用程序中比较/实现 `app.use(cors(corsOptions));` 和 `app.options('*', cors(corsOptions));`的主要内容,如果未能解决你的问题,请参考以下文章

有哪些关于 Node.js 以及 Express 的书籍

Nodemon 未在 React-Express-Node 应用程序中刷新浏览器

向 node express 添加新路由

从 Express/node.js Web 应用程序预填充 HTML/Jade

express,node.js实现获取本地文件夹下面的全部图片文件

使用 Express、Node 和 JQuery 提交表单