Node.js обработка ошибок createReadStream

Я использую сервер SSR React node.js, и мне нужны предложения о том, как решить мою проблему. Мой сервер node.js вылетает / перезагружается при ошибке, например, окно не определено и т.д., вместо того, чтобы просто регистрировать и распечатывать сообщение об ошибке 500.

Вот мой стрим:

  try {
  .......
  .......
  .......

    const markupStream = renderToNodeStream(
      <Provider store = {store}>
        <ConnectedRouter history = {history} location = {context}>
          <App/>
        </ConnectedRouter>
      </Provider>
    );

    if (context.url) {
      return res.redirect(301, context.url)
    }

    return fs.createReadStream(htmlFilePath)
      .pipe(htmlReplace('#root', markupStream))
      .pipe(replaceStream('__SERVER_DATA__', serialize(store.getState())))
      .pipe(res);
  } 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);
  }

Я думал, что моя уловка получит эти ошибки, но, видимо, нет, может ли кто-нибудь помочь мне указать мне правильное направление?

ОБНОВЛЕНИЕ: 1 В настоящее время я пытаюсь:

const readStream = fs.createReadStream(htmlFilePath);

// Should hopefully catch the errors
readStream.on('error', function(err) {
  res.end(err);
});

return readStream.pipe(htmlReplace('#root', markupStream))
  .pipe(replaceStream('__SERVER_DATA__', serialize(store.getState())))
  .pipe(res);
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
0
2 838
1

Ответы 1

Вам нужно сначала создать поток, прежде чем возвращать его, чтобы использовать его функцию обратного вызова ошибки:

var readStream = fs.createReadStream(filename);
  readStream.on('error', function(err) {
    res.end(err);
  });
return readStream

Другие вопросы по теме