2016-12-19 9 views
0

私のサーバーからの最初の応答は提供されていませんでした。それは私のReactコンポーネントのエラーのためでしたが、Expressはエラーを投げませんでした。ここでは、サーバー側で起こっていることの抜粋です。コードは、この点に着いた後、静かに失敗しました:サーバー側Redux/React。 Express非投げ込みエラー

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

サーバーでページをレンダリングするときには、エラーをキャッチするためにrenderToStringの周囲にtry catchをラップする必要があります。例えば

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); 
    } 
} 
関連する問題