У меня проблемы с перехватом ошибок при рендеринге сервера, странным для меня является то, что он достигает оператора catch, однако он все еще всплывает, вылетает и получает исключение Uncaught.
Вот урезанная версия моей функции:
export default (htmlFilePath, observer) => async (req, res) => {
try {
const { state } = await rehydrate.dispatchRequired(store, [
setMobileDetect.bind(null, mobileDetect),
...REQUIRED_ACTIONS,
]);
// Will dispatch the required data through the store,
// the returned value is not important
const matches = rehydrate.getMatches(req, state);
let status = 200;
componentNames = matches.map(
({ route }) => route.component.displayName,
);
await rehydrate.rehydrate(matches, store, state);
const markupStream = renderToNodeStream(
<Provider store={store}>
<ConnectedRouter history={history} location={context}>
<App />
</ConnectedRouter>
</Provider>,
);
if (context.url) {
return res.redirect(301, context.url);
}
// if no routes match we return 404
if (!matches.length) {
status = 404;
}
return fs
.createReadStream(htmlFilePath)
.pipe(htmlReplace("#root", markupStream))
.pipe(
replaceStream("__SERVER_DATA__", serialize(store.getState())),
)
.pipe(res.status(status));
} catch (err) {
const errMarkup = renderToNodeStream(
<Provider store={store}>
<ConnectedRouter history={history} location={context}>
<Error500 error={err} />
</ConnectedRouter>
</Provider>,
);
logger.log({
level: "error",
message: `Rendering ${
req.originalUrl
} fallback to Error render method`,
...{
errorMessage: err.message,
stack: err.stack,
},
});
return fs
.createReadStream(htmlFilePath)
.pipe(htmlReplace("#root", errMarkup))
.pipe(res.status(500));
} finally {
logger.info(
`Request finished ${req.originalUrl} :: ${res.statusCode}`,
);
end({
route: path,
componentName: componentNames[0],
code: res.statusCode,
});
logger.profile(profileMsg);
}
};
Я хочу, чтобы мой блок catch возвратил модуль для 500 ошибок, но экземпляр узла падает из-за необработанного исключения из markupStream ()
ОБНОВЛЕНИЕ: По запросу вот журнал:
https://pastebin.com/A4vL8zcc