Относительные пути в NodeJS

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

Если же файл лежит в другом месте, то в параметр метода нужно писать путь к этому файлу.

Посмотрим на примерах.

Пример

Пусть у нас есть следующая структура файлов:

  • index.js
  • /directory/
    • readme.txt

Давайте прочитаем содержимое текстового файла. Для этого кроме имени файла нам понадобится указать еще и папку, в которой он лежит:

let path = 'directory/readme.txt'; let data = await fs.promises.readFile(path, 'utf8');

Пример

Пусть у нас есть следующая структура файлов:

  • /script/
    • index.js
  • readme.txt

В таком случае попытка прочитать наш файл, указав в качестве пути его имя, закончится ошибкой:

let path = 'readme.txt'; let data = await fs.promises.readFile(path, 'utf8'); // выдаст ошибку

Почему выдается ошибка? Дело в том, что мы в параметр функции написали имя файла. Это значит, что читаемый файл должен размещаться в той же папке, что и запускаемый.

Однако, наш читаемый файл находится на уровень выше, то есть в той папке, которая содержит папку со скриптом.

В таком случае мы должны явно указать в пути к файлу, что этот файл нужно искать на уровень выше. Для этого перед именем файла следует написать ../. Сделаем это:

let path = '../readme.txt'; let data = await fs.promises.readFile(path, 'utf8');

Пример

Пусть у нас есть следующая структура файлов:

  • /script/
    • index.js
  • /directory/
    • readme.txt

В этом случае при чтении файла мы сначала выйдем на уровень выше, а затем укажем путь к нашему файлу относительно этого уровня:

let path = '../directory/readme.txt'; let data = await fs.promises.readFile(path, 'utf8');

Пример

Пусть у нас есть следующая структура файлов:

  • /script/
    • /test/
      • index.js
  • /directory/
    • readme.txt

В этом случае нам потребуется выйти наверх два раза:

let path = '../../directory/readme.txt'; let data = await fs.promises.readFile(path, 'utf8');

Практические задачи

Напишите код, который прочитает содержимое текстового файла:

  • index.js
  • /dir1/
    • /dir2/
      • readme.txt

Напишите код, который прочитает содержимое текстового файла:

  • /script/
    • index.js
  • /dir1/
    • /dir2/
      • readme.txt

Напишите код, который прочитает содержимое текстового файла:

  • /script1/
    • /script2/
      • index.js
  • /dir/
    • readme.txt

Напишите код, который прочитает содержимое текстового файла:

  • /script1/
    • /script2/
      • /script3/
        • index.js
  • /dir1/
    • /dir2/
      • /dir3/
        • readme.txt