Использую 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. Можно повесить автозапуск, но это костыль, хочется решить по-человечески.
Кто-нибудь может помочь выяснить, где может скрываться проблема?