Reactjs 在react中,如何将后端RESTAPI传递到前端?
这里是一个非常不公平的问题,我不想受到指责。 我已经用createreact应用程序创建了我的前端,我正在使用fetch将后端api传递到我的前端。后端与前端在同一台计算机上的localhost:8080上运行。前端正在端口3000上运行。我已经将URL硬编码为“”等等。如果我在主机所在的同一台机器上访问前端,一切都会正常工作。但是,如果我从另一台机器访问前端,API调用将失败,这是有意义的,因为调用是对localhost进行的 现在,传入与机器无关的RESTURL的最佳方法是什么?我不想为我的后端设置静态IP。我试过:Reactjs 在react中,如何将后端RESTAPI传递到前端?,reactjs,rest,fetch,create-react-app,Reactjs,Rest,Fetch,Create React App,这里是一个非常不公平的问题,我不想受到指责。 我已经用createreact应用程序创建了我的前端,我正在使用fetch将后端api传递到我的前端。后端与前端在同一台计算机上的localhost:8080上运行。前端正在端口3000上运行。我已经将URL硬编码为“”等等。如果我在主机所在的同一台机器上访问前端,一切都会正常工作。但是,如果我从另一台机器访问前端,API调用将失败,这是有意义的,因为调用是对localhost进行的 现在,传入与机器无关的RESTURL的最佳方法是什么?我不想为我的
“代理”:http://localhost:8080/"
这会将前端的localhost:3000/api/getForm转发到后端的localhost:8080/api/getForm。这工作得很好,但现在我陷入了一个问题,我想这是由于不正确的CORS设置。到后端的代理GET请求(Spring Boot API)工作正常,但代理POST请求返回403,响应为“无效CORS请求”
我添加了一个@CrossOrigin(origins=”http://localhost:3000)到我的spring应用程序的类级别,这将使所有API都变得友好。另外,我正在使用前端的fetch进行呼叫。关于我可能出错的地方有什么线索吗
POST/api/POST HTTP/1.1
主机:localhost:3000
连接:保持活力
内容长度:22
来源:
用户代理:Mozilla/5.0(X11;Linux x86_64)AppleWebKit/537.36(KHTML,类似Gecko)Chrome/67.0.3396.87 Safari/537.36
内容类型:application/json
接受:/
推荐人:
接受编码:gzip,deflate,br
接受语言:en-IN,en-GB;q=0.9,在美国;q=0.8,en;q=0.7
正文-{“标题”:“abc”,“正文”:“def”}
响应-403,无效的CORS请求
GET/api/GET HTTP/1.1
主机:localhost:3000
连接:保持活力
用户代理:Mozilla/5.0(X11;Linux x86_64)AppleWebKit/537.36(KHTML,类似Gecko)Chrome/67.0.3396.87 Safari/537.36
接受:/
推荐人:
接受编码:gzip,deflate,br
接受语言:en-IN,en-GB;q=0.9,在美国;q=0.8,en;q=0.7
响应-200,[{“id”:1,“title”:“Post 1”,“body”:“Backend连接得很好!”}]当您不使用node提供代码时,您可以使用webpack添加全局代码,但随后需要为每个环境创建单独的构建 使用带有SSR的节点时: 我通常使用一个.env文件,其中包含主机名、端口等的特定常量。。并在js配置文件中使用它们。然后可以导入该js文件并将其用于获取调用。可以使用dotenv()将.env变量添加到节点进程中 配置文件:
const config = {
env: {
host: (envConfig && envConfig.API_HOST) || 'localhost',
port: (envConfig && envConfig.API_PORT) || '8000',
httpOrigin: (envConfig && envConfig.API_PROTOCOL) || 'http'
}
}
export default config;
.env文件:
API_PROTOCOL=https
API_HOST=localhost
API_PORT=8000
要将配置传输到前端,您可以在html主体中序列化配置,并在客户端渲染中获取配置
<script dangerouslySetInnerHTML={{ __html: `window.__envConfig=${serialize(envConfig)};` }} charSet="UTF-8"/>