为什么我无法访问用于路由的后端文件(app.php)?

问题描述 投票:0回答:1

我正在制作一个聊天应用程序,在后端使用 PHP,在前端使用 React.js。但是,我在使用 fetch API 时遇到了问题。

我的调用端点的提取

    fetch('http://localhost/registration-processing',{
                    method:'POST',
                    headers:{
                        'Content-Type':'application/json'
                    },
                    body:JSON.stringify({
                        firstName:firstName,
                        lastName:lastName,
                        username:username,
                        email:email,
                        password:password
                    })
                })
                .then((response)=>{
                    if(response.ok){ 
                        return response.json();
                    }
                })
                .then((data)=>{
                    console.log('Response:'+data);
                })
                .catch((err)=>{
                    console.error('Error is this:'+err);
                })

我没有在“localhost”中明确写入端口,因为 Apache 在端口 80 上运行。在安装 React 之前,Fetch 工作得非常好,我在其中使用了纯 JS。现在我收到消息:

Access to fetch at 'http://localhost/registration-processing' 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. If an opaque response serves your needs, set the request's mode to 'no-cors' to fetch the resource with CORS disabled.

但是我尝试在 fetch 中使用

mode:'no-cors'
,并且得到成功的响应(.then 被执行,而不是 catch),但结果是
Response:undefined
,即使在我尝试使用
echo json_encode(object)
返回值之后,因为 我认为app.php 无法访问,它是为了处理所有路由和获取请求而设计的。

我尝试像这样配置.htaccess,但没有结果

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /back-end/app.php [QSA,L]

这是我的项目结构:

├── back-end/
│   ├── app.php
│   └── .htaccess
├── front-end/
│   ├── react-environment(where fetch is)

所以,我不知道可能出现什么问题以及如何解决这个问题。另请注意:当我使用

php -S localhost:8000
时没有问题,但当我通过 Laragon 使用 Apache 服务器时,不断显示错误。

javascript php reactjs apache .htaccess
1个回答
0
投票

请注意,

fetch
位于前端项目中,并在客户端(浏览器)上执行。因此,
localhost
解析为用户的计算机,而不是您的服务器。

您只需将

localhost
替换为您部署的服务器 IP/域名即可。

© www.soinside.com 2019 - 2024. All rights reserved.