Javascript 对错误404作出反应路由器重定向
晚上好,我的问题和路由器有关 这是我的App.js,我的所有路线都在这里处理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
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几乎没有群集可能哈希路由将解决此问题?