2016-12-19 32 views
0

我的服務器的初始響應沒有被服務,這是由於我的React組件中有錯誤,但是Express沒有拋出任何錯誤。這裏是服務器端正在發生的一些事情。代碼一到這個點,然後默默地失敗:服務器端Redux/React。 Express not throwing error

res.status(200).send(html(renderToString(
    <Provider store={store}> 
     <RouterContext {...renderProps} /> 
    </Provider> 
), store.getState())); 

但是有在組件render方法的錯誤。 this.props.ui不再定義,所以應該拋出一個錯誤。它不會拋出一個錯誤,它不會說任何內容,只是不會加載頁面。

return (
    <div className={`full-width full-height ${this.props.ui.showBgImage ? 'bg' : ''}`}> 
) 

任何有關如何讓我的服務器拋出一個錯誤而不是失敗的默默的想法?

回答

1

當你在服務器上渲染你的頁面時,你必須包裝try catchrenderToString函數來捕捉錯誤。

例如,

import React from 'react'; 
import ReactDOMServer from 'react-dom/server'; 
import Home from './home'; 
import { RouterContext } from 'react-router'; 
import { Provider } from 'react-redux'; 

export default function render(renderProps, store, res, next) { 

    try { 
     const markup = ReactDOMServer.renderToString(
      <Provider store={store}> 
       <RouterContext {...renderProps} /> 
      </Provider> 
     ); 

     const html = ReactDOMServer.renderToStaticMarkup(
      <HtmlDocument 
       markup={markup} 
       params={renderProps.params} 
      /> 
     ); 

     res.send(`<!DOCTYPE html>${html}`); 
    } 
    catch (err) { 
     next(err); 
    } 
} 
相關問題