path.join() yeilds дублирует или нет

#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 имели какое-либо отношение к вашей проблеме 🙂