2017-07-31 83 views
0

我正在使用快速服務器來爲create-react-app構建服務。直接鏈接時出現反應路由器內部服務器錯誤

server.js

// Express only serves static assets in production 
if (process.env.NODE_ENV === 'production') { 
    server.use(express.static('client/build')); // <--- this might be causing my problem, how to make work? 
} 

var api = require('./routes/api'); 
var email = require('./routes/email'); 

// Define API routes before the * 
server.use('/api', api); 
server.use('/email', email); 


server.get('*', (req, res) => { 
    res.sendFile(path.resolve(__dirname, 'client', 'build', 'index.html')); 
}); 

app.js

class App extends Component { 


render() { 
    return (
     <Router history={browserHistory}> 
     <Route component={Container}> 
      <Route path="/" component={Main} /> 
      <Route path="/catalog" component={Catalog} /> 
      <Route path="/product/:productId" component={ProductPage} /> 
      <Route path="/faq" component={Faq} /> 
      <Route path="/blog" component={Blog} /> 
      <Route path="/inquiry" component={Inquiry} /> 
      <Route path="/cart" component={Cart} /> 
     </Route> 
     </Router> 
    ); 
    } 
} 

export default App; 

編輯: 更新我的server.js文件,以顯示相關的代碼。我認爲問題在於使用express.static('client/build'),但我不確定要修改它以修復我的路由問題。 /編輯

這在Dev和Heroku中完美無瑕,點擊應用中的鏈接從路由轉到路由。例如,在根目錄中,我可以點擊指向「https://thesite.com/catalog」的鏈接,然後該應用程序就像其他任何路線一樣進行導航。

但是,如果我要複製上面的URL並將其粘貼到新的選項卡/瀏覽器中,則會出現500內部服務器錯誤。這意味着用戶不能爲除根之外的任何頁面添加書籤。或者,如果另一個網站鏈接到我的網頁上的特定路線,它會顯示500錯誤。刷新不是「/」的頁面會返回500錯誤。有誰知道如何解決這一問題?

+0

由於該路由在服務器上不存在,所以它是客戶端路由器。所以如果你嘗試直接轉到上述鏈接,那麼它在技術上不存在。你必須設置你的服務器重定向,以便做到這一點,我相信 –

+0

嗯,實際上,我比較了我的應用程序代碼和我的應用程序代碼是相對相同的。 https://github.com/RUJodan/Source-React/blob/master/server.js在這裏查看是否可能有配置差異?這裏的路由器以及https://github.com/RUJodan/Source-React/blob/master/src/index.jsx –

+0

我認爲你的東西。我要更新我上面的server.js文件以顯示我所忽略的內容。我想問題是使用server.use(express.static('client/build')),但沒有這個我無法加載我的生產版本heroku。是否有另一種方式來加載生產版本,同時也解決了我遇到的這個路由問題? –

回答

0

想通了。我需要爲express.static('client/build')添加一個通用路由getter。

if (process.env.NODE_ENV === 'production') { 
    server.use(express.static('client/build')); 
    server.use('*', express.static('client/build')); // Added this  
} 
相關問題