Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/411.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 对错误404作出反应路由器重定向_Javascript_Reactjs_React Router_Graphql_React Router V4 - Fatal编程技术网

Javascript 对错误404作出反应路由器重定向

Javascript 对错误404作出反应路由器重定向,javascript,reactjs,react-router,graphql,react-router-v4,Javascript,Reactjs,React Router,Graphql,React Router V4,晚上好,我的问题和路由器有关 这是我的App.js,我的所有路线都在这里处理 const-App=()=>( {(匹配项)=>{ 如果(匹配){ 返回( 当服务器用slug获取帖子的调用在post组件中解析时,您需要检查它是否为404,如果是,则将用户导航到主页 ... fetch('/post/abc-post').then((obj) => { // check if you have 404 error if (obj.statusCode === 404) { th

晚上好,我的问题和路由器有关

这是我的App.js,我的所有路线都在这里处理
const-App=()=>(
{(匹配项)=>{
如果(匹配){
返回(

当服务器用
slug
获取帖子的调用在
post
组件中解析时,您需要检查它是否为404,如果是,则将用户导航到主页

...
fetch('/post/abc-post').then((obj) => {
  // check if you have 404 error
  if (obj.statusCode === 404) {
    this.props.history.push('/');
  }
})
...
如果您向我提供有关
Post
组件的更多信息,或者该调用的位置,我可以为您提供可靠的解决方案,但基本思路如上所述。

TL;DR: 将HTTP服务器配置为将所有请求重定向到/index.html


这里的问题似乎是您的HTTP服务器返回404。这意味着当您访问/index.html(React代码所在的位置)时,应用程序将被加载,并且当用户与应用程序交互时,URL将发生更改,而无需使用React router重新加载页面

刷新时,您正在向HTTP服务器请求一个不是您的React应用程序的文件。因此,您应该将HTTP服务器配置为将所有请求(如/post/XXXX)重定向到/index.html


这个问题可能会有帮助:

快速方法之一,您可以在api客户端中设置一个拦截器,如fetch api、superagent等,如下所示:

if(!!response&&response.status==404){
存储调度(推送(“/404”);

}
querysinglepost($slug:String!){Post:Post(slug:$slug){id slug title textContent coverImageURL description}
这是我的graphql查询,其中为url提供服务的slug正在被提取。之后,我将该slug导出到上面的App.js中,它被用作路由。这里的导出:
导出默认graphql(singlePost,{options:({match})=>({variables:{slug:match.params.slug}})(Post)
问题在于我使用的是React,如果我调用“serverfault”帖子中的index.html,网站就会中断,错误是:
a2.blackoperations.com/:1资源被解释为样式表,但使用MIME类型text/html传输:http://a2.blackoperatives.com/index.html".index.html:1未捕获的语法错误:意外标记原来我的服务器主机更改了不允许创建或更改.htaccess文件的安全规则。您的服务器主机是什么?它们应该提供创建某种
“当任何非.js、.css、.png等的url到达时,提供index.html文件”
rule。请注意,您不应重定向。您希望url为/XXX,但Web服务器使用index.html进行应答。我将在apache配置上使用FallbackReserouce:TL;DR:您的服务器主机必须帮助您进行此配置。这是Apollo吗?我将Apollo与graphql和graphcms一起在客户端使用(作为graphql数据库服务)尝试{const{data}=wait graphql.query({yourQuery});}catch(err){console.log(err.response.status);}我把它放在哪里?根据apollo文档发送请求客户端的任何地方[mhhh错误消息是wait是一个保留字…我也应该把它放在我的Post.js文件的返回体中,在其中加载帖子,因为你把它用花括号括起来了?我认为问题本质上是,在尝试刷新时,浏览器向一个不存在的url发送请求,因此无法加载任何内容。我不这么认为有权更改服务器配置Im几乎没有群集可能哈希路由将解决此问题?