@OcelotJungle

Почему может падать сервер на Node.js?

Использую ExpressJS. HTTP сервер запускаю через модуль http, HTTPS сервер запускаю через модуль spdy, чтобы HTTP2, само приложение на Next.js, использую API Routes, запускаю по схеме "Custom Server", в файле server.js есть обработчик запросов к динамическим изображениям:
const dynamicFileHandler = async (req, res, next) => {
    try {
        const filePath = path.join(process.cwd() + decodeURIComponent(req.baseUrl));
        await fs.promises.access(filePath);
        res.sendFile(filePath);
    } catch(e) { next(); }
}
express.use("/images/*", dynamicFileHandler);

Все остальные запросы обрабатываются этим фрагментом:
express.all("/api/*", nextHandler);
express.get("*", nextHandler);


И вот случается иногда такое, что приложение просто падает с таким сообщением:
net.js:817
bytes += el.chunk instanceof Buffer ?
^

TypeError: Cannot read property 'chunk' of null
at Socket.bytesWritten (net.js:817:17)
at Socket.socketOnError (_http_server.js:637:31)
at Socket.emit (events.js:327:22)
at Stream.onStreamError (/root/app/node_modules/spdy/lib/spdy/handle.js:110:18)
at Stream.emit (events.js:315:20)
at errorOrDestroy (/root/app/node_modules/spdy-transport/node_modules/readable-stream/lib/internal/streams/destroy.js:98:101)
at onwriteError (/root/app/node_modules/spdy-transport/node_modules/readable-stream/lib/_stream_writable.js:424:5)
at onwrite (/root/app/node_modules/spdy-transport/node_modules/readable-stream/lib/_stream_writable.js:450:11)
at WritableState.onwrite (/root/app/node_modules/spdy-transport/node_modules/readable-stream/lib/_stream_writable.js:160:5)
at doWrite (/root/app/node_modules/spdy-transport/node_modules/readable-stream/lib/_stream_writable.js:409:30)


Я пока не смог понять, при каких условиях и как это повторить, происходит в случайные моменты, но не спонтанно, а при запросе (что, впрочем, логично, учитывая стак ошибки) от клиента.
В данный момент хочу попробовать разобраться, к чему относится эта строка в net.js, и выяснить, моя это ошибка или какой-то неприятный баг в самом Node. Можно повесить автозапуск, но это костыль, хочется решить по-человечески.
Кто-нибудь может помочь выяснить, где может скрываться проблема?
  • Вопрос задан
  • 293 просмотра
Пригласить эксперта
Ответы на вопрос 1
@rPman
открываешь файл net.js строка 817
bytes += el.chunk instanceof Buffer
и добавляешь перед этой строчкой (аккуратно выбери место) проверку el на null, и вызываешь обработку ошибки
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы