将 CORS 模块添加到单个快速路由不起作用

use*_*314 5 node.js cors express

如果我为所有路由启用 CORS,则来自前端 ( https://localhost:3000) 的请求将正常工作并获取正确的请求标头。

const express = require('express');
const cors = require('cors');
var app = express();

app.use(cors());

app.post('/api/submitEmail', () => console.log('yay'));
Run Code Online (Sandbox Code Playgroud)

如果我在单个路由上启用 CORS(与文档布局完全相同),我会在控制台中收到 CORS 错误

app.post('/api/submitEmail', cors(), () => console.log('booooo'));
Run Code Online (Sandbox Code Playgroud)

错误:

Access to XMLHttpRequest at 'http://localhost:8000/api/submitEmail' from origin 'http://localhost:3000' has been blocked by CORS policy: Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource.
Run Code Online (Sandbox Code Playgroud)

我缺少什么?

来自前端的整个请求如下

const api =
  process.env.NODE_ENV === "development"
    ? "http://localhost:8000"
    : MY_PROD_URL;

const user = {
    email
  };

  axios.post(`${api}/api/submitEmail`, { user }).then(res => {
    setIsLoading(false);
    setValidationMessage(res.data);
  });
Run Code Online (Sandbox Code Playgroud)

Mim*_*oid 6

我遇到了同样的问题,@jfriend00 的回答帮助了我。您只需要包含 Express 应用程序的初始选项:

app.options('/this_is_your_cors_route', cors())
Run Code Online (Sandbox Code Playgroud)

然后你的 cors 路线就可以工作了:

app.post('/this_is_your_cors_route', cors(), (req, res) => {});
Run Code Online (Sandbox Code Playgroud)

以下是此问题的文档:https ://github.com/expressjs/cors#enabling-cors-pre-flight