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)
我遇到了同样的问题,@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