【发布时间】:2017-04-08 04:22:08
【问题描述】:
好的,所以我使用 React 和 React-Router 制作了一个 SPA,并将其推送到 github 页面,但是当我在浏览器中刷新或单击返回时,我编写的所有路由都不起作用。我在本地提供页面时遇到了同样的问题,但随后转到this SO answer 并制作了一个 server.js 文件,该文件在每个路由处提供了对我的静态 HTML 页面的重定向。这是文件的样子:
"use strict";
let express = require('express');
let path = require('path');
let app = express();
app.use(express.static('public'));
app.get('/contact', function(req, res){
res.sendFile('public/index.html', { root: __dirname });
})
app.get('/about', function(req, res){
res.sendFile('public/index.html', { root: __dirname });
})
app.get('*', function(req, res){
res.sendFile('public/index.html', { root: __dirname });
})
app.listen(8080, function(){
console.log('Listening on port 8080!')
})
现在,我的问题是,当我将项目推送到 github 页面时,所有这些逻辑都被忽略了,github 的路由接管了,我遇到了同样的问题,即无法刷新或直接访问 /contact 或 @987654326 @。我知道这似乎是一个明显的问题,因为 github pages 旨在仅托管静态站点,但我看到人们暗示为每个路由创建静态页面的其他方法,例如 this reddit post 中的答案,但我不知道该怎么做。
我还应该提到,因为我已经有一个位于 user-name.github.io 的站点,所以这个站点托管在 user-name.github.io/projects,这就是我的 / 路由。我不知道这是否有什么不同,我只是想我应该提一下。
我想我已经用尽了所有选项来尝试在 gh-pages 上成功托管它,我知道有像 Single Page Apps for GitHub Pages 这样的项目来尝试解决这个问题,但是我只是想看看是否有人在那里在诉诸于此之前,我有幸做到了这一点。
仅供参考,这是我的 app.js(包含路由逻辑):
import React, {Component} from 'react';
import {render} from 'react-dom';
import {Router, Route, browserHistory, IndexRoute} from 'react-router';
//Import custom components
import About from '../components/about.js';
import Contact from '../components/contact.js';
import Sidebar from '../components/sidebar.js';
import Imagelist from '../components/image-list.js';
render(
<Router history={browserHistory}>
<Route path="/" component={Sidebar}>
<IndexRoute component={Imagelist}/>
<Route path="/about" component={About}/>
<Route path="/contact" component={Contact}/>
</Route>
</Router>,
document.getElementById('content')
);
对此的任何帮助将不胜感激,如果有帮助,我们很乐意包含更多代码。
【问题讨论】:
-
express 是一个用于编写 api 路由的后端框架......你想用 gh 静态页面实现什么?你想 gh 页面指向另一个域中的 api?
-
我使用了 express,因为这是另一个 SO 答案中所建议的,但是是的,我知道当我将它推送到 gh-pages 时我不能包含任何这些逻辑。只是想看看是否有任何关于为每条路线创建静态页面的建议。
标签: javascript react-router url-routing single-page-application github-pages