File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change @@ -113,4 +113,8 @@ module.exports = React.createClass({
113113 );
114114 }
115115});
116- ```
116+ ```
117+
118+ ## Error handling
119+
120+ sourcejs-react will show errors right on the page when sourcejs is launched in development mode and log errors via console.error when in other (production) mode.
Original file line number Diff line number Diff line change 1+ var React = require ( 'react/addons' ) ;
2+ module . exports = React . createClass ( {
3+ displayName : 'error.jsx' ,
4+ propTypes : {
5+ stack : React . PropTypes . string . isRequired
6+ } ,
7+ render : function ( ) {
8+ return (
9+ < div style = { { color : 'red' } } >
10+ < h1 > Error: </ h1 >
11+ < p dangerouslySetInnerHTML = { { __html : this . props . stack . replace ( / \n / g, '<br>' ) } } > </ p >
12+ </ div >
13+ ) ;
14+ }
15+ } ) ;
Original file line number Diff line number Diff line change @@ -14,16 +14,41 @@ var _ = require('lodash');
1414 * */
1515exports . process = function ( req , res , next ) {
1616 if ( req . specData && req . specData . isJsx ) {
17- var pathToFile = path . join ( global . app . get ( 'user' ) , req . url ) ;
1817 _ . each ( require . cache , function cleanAllJsxReferences ( cacheObj , key ) {
1918 if ( path . extname ( key ) === '.jsx' ) {
2019 delete require . cache [ key ] ;
2120 }
2221 } ) ;
23- var component = require ( pathToFile ) ;
24- var factory = React . createFactory ( component ) ;
25- req . specData . renderedHtml = React . renderToString ( factory ( { } ) ) ;
22+ var pathToFile = path . join ( global . app . get ( 'user' ) , req . url ) ;
23+ var html ;
24+ try {
25+ var component = React . createFactory ( require ( pathToFile ) ) ;
26+ html = getHtml ( component ) ;
27+ } catch ( ex ) {
28+ html = getErrorAsHtml ( ex ) ;
29+ }
30+ req . specData . renderedHtml = html ;
2631 }
2732
2833 next ( ) ;
29- } ;
34+ } ;
35+
36+ function getHtml ( component ) {
37+ try {
38+ return React . renderToString ( component ( { } ) ) ;
39+ } catch ( ex ) {
40+ return getErrorAsHtml ( ex ) ;
41+ }
42+ }
43+
44+ function getErrorAsHtml ( ex ) {
45+ if ( global . MODE !== 'development' ) {
46+ console . error ( ex ) ;
47+ return 'Server error' ;
48+ }
49+
50+ var error = React . createFactory ( require ( './error.jsx' ) ) ;
51+ return React . renderToString ( error ( {
52+ stack : ex . stack
53+ } ) ) ;
54+ }
Original file line number Diff line number Diff line change 11{
22 "name" : " sourcejs-react" ,
3- "version" : " 0 .0.3 " ,
3+ "version" : " 1 .0.0 " ,
44 "description" : " React middleware for sourcejs.com" ,
55 "main" : " index.js" ,
66 "dependencies" : {
You can’t perform that action at this time.
0 commit comments