2017-09-26 27 views
0

我的反應路由器工作正常與開發ENV,這就是我的WebPack開發服務器那樣:重新加載時無法獲得錯誤404?

historyApiFallback: { 
    index: 'index.html', 
} 

所以在生產模式,我想這樣做,我做到了,在快遞這樣的:

const indexPath = path.join(__dirname, '../public/index.html') 
const publicPath = express.static(path.join(__dirname, '../public')) 

    app.use('/public', publicPath) 
    app.use('/graphql', graphQLHTTP(async (req) => { 
    let { user } = await getUser(req.headers.authorization); 
    if(!user) { 
     user = 'guest' 
    } 
    return { 
     schema, 
     pretty: true, 
     graphiql: true, 
     context: { 
     user, 
     } 
    } 
    })); 

app.get('/', function (_, res) { res.sendFile(indexPath) }); 

我沒有改變任何東西與react-router-dom所以我假設錯誤是在我的明確配置。那麼在生產模式下,historyApiFallback有什麼作用?下面是我的WebPack捆綁配置:

output: { 
    path: path.join(__dirname, 'public'), 
    filename: 'bundle.js', 
    publicPath: '/public/' 
    }, 
在我的HTML

我引用束這樣的:

<script type="text/javascript" src="/public/bundle.js"></script> 

我覺得有合適的配置,但是當我重裝,我得到無法得到錯誤404?

回答

1

你應該這行添加到您的應用程序:

app.get('*', function (_, res) { res.sendFile(indexPath) }); 

或者你應該使用這個包好:https://github.com/bripkens/connect-history-api-fallback

你應該閱讀更多關於history模式:

爲了擺脫哈希,我們可以使用路由器的歷史記錄模式,該歷史記錄模式利用history.pushState API在沒有頁面重新加載的情況下實現URL導航:

使用歷史記錄模式時,網址將顯示爲「正常」,例如http://oursite.com/user/id。美麗!

但是,這裏有一個問題:由於我們的應用程序是一個單頁的客戶端應用程序,沒有適當的服務器配置,如果用戶直接在瀏覽器中訪問http://oursite.com/user/id,用戶將會收到404錯誤。現在這很醜陋。

不用擔心:要解決該問題,您只需將簡單的全部備用路由添加到您的服務器。如果網址與任何靜態資源都不匹配,它應該提供與您的應用所在的index.html頁面相同的頁面。再次美觀!

+0

這有效,'/'如何使用'*'而'/'沒有使用? –

+0

我更新了我的答案!如果您覺得此答案可以解決問題,請點擊綠色的選中標記將其標記爲「已接受」。 – imcvampire