【发布时间】:2021-07-06 12:52:21
【问题描述】:
前端:localhost:3000 (react app) App.js (client) on load call api '/'
function fetch_redirect() {
fetch("http://localhost:8082")
}
function App() {
return <div className="App">{fetch_redirect()}</div>;
}
export default App;
后端:localhost:8082 (nodejs express app) 发送重定向到客户端上的 /test 端点
const express = require('express')
const app = express()
const cors = require('cors');
const whitelist = ['http://localhost:3000']
const corsOptions = {
origin: function (origin, callback) {
console.log(origin, whitelist.indexOf(origin) !== -1);
if (whitelist.indexOf(origin) !== -1) {
callback(null, true)
} else {
callback(new Error('Not allowed by CORS'))
}
}
}
app.use(cors(corsOptions))
app.get('/', function (req, res) {
res.redirect('http://localhost:3000/test')
})
app.listen(8082)
主要问题出在客户端 (react) 调用 API 后,重定向被阻止...如何让客户端响应应用程序遵循此重定向到 'http:/ /localhost:3000/test' 我的后端已经有了 cors,并启用了 localhost:3000 的白名单,以允许我不阻止 API 调用...但是 redirect 现在已从 fetch 前端阻止强>!
错误详情: CORS 策略已阻止从源“http://localhost:3000”访问“http://localhost:3000/test”(从“http://localhost:8082/”重定向)获取:无“访问” -Control-Allow-Origin' 标头存在于请求的资源上。如果不透明的响应满足您的需求,请将请求的模式设置为“no-cors”以获取禁用 CORS 的资源。
【问题讨论】:
-
你用什么来运行 react 应用程序?我复制了您的代码并使用
vite运行客户端,一切正常。您可能需要修改您的5 客户端开发服务器 -
使用 npm start 命令创建-react-app
-
为了完成这项工作,我认为您需要更改 localhost:8082 快速代码以允许所有来源 - 而不仅仅是
http://localhost:3000。原因是,当请求跨源重定向时,浏览器会将 Origin 请求标头设置为 null。所以当localhost:8082 express代码看到请求时,Origin的值是null,而不是http://localhost:3000。
标签: javascript node.js reactjs cors