В node.js readFile () показывает, как зафиксировать ошибку, однако для функции readFileSync () нет комментариев относительно обработки ошибок. Таким образом, если я попытаюсь использовать readFileSync () при отсутствии файла, я получаю сообщение об ошибке Error: ENOENT, no such file or directory
.
Как зафиксировать возникшее исключение? Документ не указывает, какие исключения выбрасываются, поэтому я не знаю, какие исключения мне нужно перехватить. Я должен отметить, что мне не нравится общий стиль операторов try / catch «поймать каждое возможное исключение». В этом случае я хочу поймать конкретное исключение, которое возникает, когда файл не существует, и я пытаюсь выполнить readFileSync.
Обратите внимание, что я выполняю функции синхронизации только при запуске, прежде чем обслуживать попытки подключения, поэтому комментарии о том, что мне не следует использовать функции синхронизации, не требуются :-)
источник
fs.existsSync()
можете использовать, как видно из моего нового ответаОтветы:
Обычно
fs.readFileSync
выдает ошибку, если файл не найден. Эта ошибка взята изError
прототипа и выброшена с помощьюthrow
, поэтому единственный способ поймать это с помощьюtry / catch
блока:К сожалению, вы не можете определить, какая ошибка возникла, просто взглянув на цепочку прототипов:
это лучшее, что вы можете сделать, и это будет верно для большинства (если не для всех) ошибок. Поэтому я предлагаю вам пойти со
code
свойством и проверить его значение:Таким образом, вы имеете дело только с этой конкретной ошибкой и повторно генерируете все остальные ошибки.
Кроме того, вы также можете получить доступ к
message
свойству ошибки, чтобы проверить подробное сообщение об ошибке, которое в данном случае:Надеюсь это поможет.
источник
EACCES
необходимо проверить код в операторе if на случай, когда файл существует, но не может быть прочитан из-за отсутствия разрешенийЯ предпочитаю этот способ справиться с этим. Вы можете проверить, существует ли файл синхронно:
источник
files
со всем, что я узнал, чтобы упростить асинхронность и попробовать / поймать.Вы должны поймать ошибку, а затем проверить, что это за ошибка.
источник
Я использую немедленно вызываемую лямбду для этих сценариев:
async
версия:источник
fs
это модуль узлаfs.readFileAsync()
сейчасfs.readFile()
и также не должно помещать функцию async внутри try / catch в node.js. try / catch никогда не получит ошибку, поскольку он асинхронный. вместо этого передайте ошибку в обратном вызове и обрабатывайте ее там:fs.readFile('/etc/passwd', (err, data) => { if (err) throw err; console.log(data); });
from: nodejs.org/dist/latest-v12.x/docs/api/…Вместо этого попробуйте использовать Async, чтобы не блокировать единственный поток, который у вас есть с NodeJS. Посмотрите этот пример:
Позже можно использовать эту асинхронную функцию с попыткой / уловом из любой другой функции:
Удачного кодирования!
источник
Механизм JavaScript try… catch не может использоваться для перехвата ошибок, генерируемых асинхронными API. Распространенной ошибкой новичков является попытка использовать throw внутри обратного вызова с ошибкой:
Это не сработает, потому что функция обратного вызова, переданная в fs.readFile (), вызывается асинхронно. К тому времени, как обратный вызов будет вызван, окружающий код, включая блок try… catch, уже завершится. Сообщение об ошибке внутри обратного вызова в большинстве случаев может привести к сбою процесса Node.js. Если домены включены или обработчик был зарегистрирован в process.on ('uncaughtException'), такие ошибки можно перехватить.
ссылка: https://nodejs.org/api/errors.html
источник