#javascript #node.js #fs
Вопрос:
У меня здесь довольно странная ситуация.
1. Когда я использую этот код в своем tokens.js
файле
const pathToPrivKey = path.join(__dirname, "..", "src/helpers/key/id_rsa_priv.pem");
Ошибка в том, что:
Error: ENOENT: no such file or directory, open 'C:UsersarpitanandDesktopnode-appsrcsrchelperskeyid_rsa_priv.pem'
Обратите внимание, что src
это автоматически дублируется в строке пути как srcsrc
2. Когда я использую этот код в своем tokens.js
файле:
const pathToPrivKey = path.join(__dirname, "..", "helpers/key/id_rsa_priv.pem");
Ошибка в том, что:
Error: ENOENT: no such file or directory, open 'C:UsersarpitanandDesktopnode-apphelperskeyid_rsa_pub.pem'
Заметьте здесь, что теперь и /src/src/
то, и другое отсутствует!
Это моя структура папок:
----src
| |
| ---controller
| |
| ---helpers
| | | tokens.js //I am here
| | ---key
| | id_rsa_priv.pem //I want to access this file
| | id_rsa_pub.pem
---test
deleteUser.js
Обновить
1. На выходе console.log(_dirname)
получается:
C:UsersarpitanandDesktopnode-appsrchelpers
2. И я уже запустил это
const pathToPrivKey = path.join(__dirname, "key/id_rsa_priv.pem");
Результатом чего является:
Error: ENOENT: no such file or directory, open 'C:UsersarpitanandDesktopnode-apphelperskeyid_rsa_priv.pem'
3. Я использую pathToPrivKey
здесь и только здесь:
const PRIV_KEY = fs.readFileSync(pathToPrivKey, "utf8");
Комментарии:
1. Пожалуйста, покажите нам результат
console.log( __dirname )
в каждой ситуации — в противном случае я понижу ваш голос за то, что вы не выполнили базовую отладку.2. Кроме того, ваша папка на рабочем столе , вероятно, не лучшее место для размещения ваших проектов разработки…
3. Я добавил, пожалуйста, проверьте обновленный вопрос 🙂
4. Кроме того, нет никакого способа
path.join()
ENOENT
создать исключение. Вы не показываете код, который пытался бы получить доступ к файлу.5. Какие еще части кода я должен показать? Как я думаю, работа выполняется только этой конкретной строкой кода
Ответ №1:
__dirname
является каталогом, в котором находится модуль, а не, например, рабочим каталогом программы.
Если у вас есть код src/helpers/tokens.js
и вы хотите обратиться к src/helpers/key/id_rsa_priv.pem
,
const keyPath = path.join(__dirname, "key/id_rsa_priv.pem");
этого достаточно.
Комментарии:
1. Я уже запустил код, который вы написали, пожалуйста, проверьте обновленный вопрос 🙂
2. Ну, а вы уверены, что этот файл существует?
3. Да, безусловно!
4. @ArpitAnand
cmd
не имеет точно такого же «опыта работы с файловой системой» (за неимением лучшей фразы), как программа NodeJS — просто потому, что она работает,cmd.exe
не означает, что она работает в вашем коде.5. @ARPITANИ ИСПОЛЬЗУЙ СВОЙ ОТЛАДЧИК, ТЫ ОБЫВАТЕЛЬ , пройдись по своему коду и проверь переменные, чтобы увидеть, где логика твоей программы идет не так. Вы предоставили нам недостаточно подробностей, чтобы диагностировать вашу проблему, и, к сожалению, для вас у нас нет экстрасенсорных телепатических способностей, чтобы волшебным образом узнать, что происходит не так издалека, учитывая очень ограниченную информацию, которую вы нам предоставили до сих пор.
Ответ №2:
Хорошо, я действительно не знаю, что происходило с моим кодом раньше, но я попытался очистить кэш npm, используя npm cache clean --force
его вместе с удалением node modules
и переустановкой, и это сработало!
Комментарии:
1. Я не думаю, что npm или node_modules имели какое-либо отношение к вашей проблеме 🙂