Node.js: EBADF, плохой дескриптор файла

Если я перезагружаю свое приложение (из браузера с помощью кнопки перезагрузки), 50 reload/10 seconds это дает мне эту ошибку:

events.js:45
    throw arguments[1]; // Unhandled 'error' event
                   ^
Error: EBADF, Bad file descriptor

Мне кажется, что это ошибка пропускной способности или что-то в этом роде. Первоначально у меня была ошибка при воспроизведении с помощью HTML 5 Audio API, и если я загружал аудиофайл 10-15 раз последовательно, то я получал ошибку, но теперь я обнаружил, что я получаю ошибку и без Audio API, просто перезагружая сайт много раз, также Safari выдает ошибку намного быстрее, чем Chrome (WTF?)

Я использую Node.js 0.4.8 с express + jade и я также подключен к базе данных MySQL с db-mysql модуль.

Я не могу найти в Интернете никаких статей на эту тему, что может помочь, поэтому, пожалуйста, дайте мне знать, что может вызвать эту ошибку, потому что это действительно сбивает с толку:(

3 ответа

Решение

Под "перезагрузкой приложения" вы подразумеваете обновление домашней страницы приложения из браузера или фактически остановку и перезапуск процесса сервера node.js? Я предполагаю первое, и в этом случае, если вы не можете надежно воспроизвести это, отладку будет довольно сложно, тем более что у вас нет хорошей трассировки стека для точного определения источника. Но если вы используете express.js app.error hook ( документы здесь), вы захотите записать путь ошибки из ошибки "Bad file descriptor", которая, надо надеяться, подскажет вам, является ли это временный файл, который был удален или что. С точки зрения фактической причины, мы можем предложить только предположения, так как "Плохой дескриптор файла" является очень общей ошибкой низкого уровня, которая в основном означает, что вы вызываете операцию с файловым дескриптором, который больше не находится в правильном состоянии для обработки этой операции (например, чтение закрытого файла, открытие удаленного файла и т. д.).

Эта ошибка может возникнуть в результате использованияfsдля сохранения файла, имя которого является числом , а не строкой . Имена файлов должны быть строками:

Неправильно:

      const fileName = 12345;
const fileContent = "The great croissant."

fs.writeFileSync(fileName, fileContent);

Правильный:

      fs.writeFileSync(`${fileName}`, fileContent);

Также правильно:

      const fileName = "12345";
fs.writeFileSync(fileName, fileContent);

@CIRK, взгляните на это: https://github.com/joyent/node/issues/1189

это не проблема узла, а проблема настройки системы.

изменить: или, возможно, это связано с этой ошибкой в ​​Connect 1.4.3: https://github.com/senchalabs/connect/issues/297

если это ваш случай, просто попробуйте обновить его

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