Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 28.02.2022, 01:30
Кандидат Javascript-наук
Отправить личное сообщение для Raadsert Посмотреть профиль Найти все сообщения от Raadsert
 
Регистрация: 09.12.2021
Сообщений: 102

Node.js и fs-extra
Здравствуйте.

Подскажите пожалуйста, не могу понять логику работы функции fs.outputJson()

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

Как пример, вот такое дерево каталогов:

module
-index.js // тут запускается функция fs.outputJson()
dir
-foo // в этом каталоге создание файла
--exemple.json

И так, к примеру если указать так:
fs.outputJson('../dir/foo/file.json', {name: "foo"})


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

А если указать так:

fs.outputJson(path.resolve(__dirname, '..', 'dir', 'foo', 'file.json'), {name: "foo"})


То файл будет создан. Это из-за особенности функции path.resolve() которая ставит слеши в нужную строну? Тогда почему такой вариант будет работать?

fs.readdir('../dir/foo')


Объясните пожалуйста почему так происходит, не могу понять. (Документацию читал но не нашёл объяснения этому)
Ответить с цитированием
  #2 (permalink)  
Старый 28.02.2022, 10:35
Аватар для ksa
ksa ksa на форуме
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,228

Сообщение от Raadsert
Это из-за особенности функции path.resolve() которая ставит слеши в нужную строну?
Именно из-за ее "особенностей" работы.
Мало того.
Указывая __dirname используется абсолютный путь.
Ответить с цитированием
  #3 (permalink)  
Старый 28.02.2022, 14:10
Кандидат Javascript-наук
Отправить личное сообщение для Raadsert Посмотреть профиль Найти все сообщения от Raadsert
 
Регистрация: 09.12.2021
Сообщений: 102

Сообщение от ksa Посмотреть сообщение
Именно из-за ее "особенностей" работы.
Мало того.
Указывая __dirname используется абсолютный путь.
А почему тогда работает fs.readdir('../dir/foo') ?
Ответить с цитированием
  #4 (permalink)  
Старый 28.02.2022, 14:35
Аватар для ksa
ksa ksa на форуме
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,228

Raadsert, пока ты кидаешь огрызки своих программ - ничего путнего не ответить.
Делай полный тестовый пример. Описывай какая операционка у тебя на сервере.
Тогда твой пример при желании можно будет потестить у себя.
Я в своих программах использую вот такой вариант касательно путей
Сообщение от Raadsert
fs.outputJson(path.resolve(__dirname, '..', 'dir', 'foo', 'file.json'), {name: "foo"})
Поскольку разработка ведется на вин-компах, а рабочий сервер уже использует "линуксовые варианты".
Ответить с цитированием
  #5 (permalink)  
Старый 28.02.2022, 15:19
Кандидат Javascript-наук
Отправить личное сообщение для Raadsert Посмотреть профиль Найти все сообщения от Raadsert
 
Регистрация: 09.12.2021
Сообщений: 102

Сообщение от ksa Посмотреть сообщение
Raadsert, пока ты кидаешь огрызки своих программ - ничего путнего не ответить.
Делай полный тестовый пример. Описывай какая операционка у тебя на сервере.
Тогда твой пример при желании можно будет потестить у себя.
Я в своих программах использую вот такой вариант касательно путей

Поскольку разработка ведется на вин-компах, а рабочий сервер уже использует "линуксовые варианты".
Сервер у меня на линуксе. А что на счёт готового варианта, вот...

Дерево каталогов:

module
-index.js // тут запускается функция fs.outputJson()
dir
-foo // в этом каталоге создание файла
--exemple.json

Код из файла index.js:
const fs = require('fs-extra');
const length = fs.readdirSync('../dir/foo').length;


length выдаёт значение количества файлов в каталоге foo.
Ответить с цитированием
  #6 (permalink)  
Старый 28.02.2022, 16:58
Аватар для ksa
ksa ksa на форуме
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,228

Сообщение от Raadsert
А что на счёт готового варианта, вот...
Уже хоть что-то...
Но ты не указал состав package.json
У меня он получился вот такой
{
  "name": "module",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "keywords": [],
  "author": "",
  "license": "ISC",
  "dependencies": {
    "fs-extra": "^10.0.1"
  }
}

Я взял твой пример... Запустил... Потом дописал то что у тебя не работало...
И оно у меня прекрасно отработало. Даже на вин-операционке
const fs = require('fs-extra');
const length = fs.readdirSync('../dir/foo').length
console.log(length)
fs.outputJson('../dir/foo/file.json', {name: "foo"})

Т.е. файл file.json благополучно был создан по указанному пути.
Ответить с цитированием
  #7 (permalink)  
Старый 28.02.2022, 18:31
Кандидат Javascript-наук
Отправить личное сообщение для Raadsert Посмотреть профиль Найти все сообщения от Raadsert
 
Регистрация: 09.12.2021
Сообщений: 102

Сообщение от ksa Посмотреть сообщение
Уже хоть что-то...
Но ты не указал состав package.json
У меня он получился вот такой
{
  "name": "module",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "keywords": [],
  "author": "",
  "license": "ISC",
  "dependencies": {
    "fs-extra": "^10.0.1"
  }
}

Я взял твой пример... Запустил... Потом дописал то что у тебя не работало...
И оно у меня прекрасно отработало. Даже на вин-операционке
const fs = require('fs-extra');
const length = fs.readdirSync('../dir/foo').length
console.log(length)
fs.outputJson('../dir/foo/file.json', {name: "foo"})

Т.е. файл file.json благополучно был создан по указанному пути.
Вот и я считаю это странным, у меня по какой то причине это работает
fs.readdirSync('../dir/foo').length
а это нет
fs.outputJson('../dir/foo/file.json', {name: "foo"})
Возможно у вас есть какие то предположения о том из-за чего это может происходить?
Ответить с цитированием
  #8 (permalink)  
Старый 28.02.2022, 20:07
Аватар для ksa
ksa ksa на форуме
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,228

Сообщение от Raadsert
Возможно у вас есть какие то предположения о том из-за чего это может происходить?
И мой пример у тебя не запускается?
Если нет - значит это у тебя какие-то особенности.
Ответить с цитированием
  #9 (permalink)  
Старый 01.03.2022, 11:06
Аватар для voraa
Профессор
Отправить личное сообщение для voraa Посмотреть профиль Найти все сообщения от voraa
 
Регистрация: 03.02.2020
Сообщений: 2,750

Сообщение от Raadsert
Возможно у вас есть какие то предположения о том из-за чего это может происходить?
С правами на запись в каталог все в порядке?
Ответить с цитированием
  #10 (permalink)  
Старый 01.03.2022, 15:19
Кандидат Javascript-наук
Отправить личное сообщение для Raadsert Посмотреть профиль Найти все сообщения от Raadsert
 
Регистрация: 09.12.2021
Сообщений: 102

Сообщение от voraa Посмотреть сообщение
С правами на запись в каталог все в порядке?
Абсолютно. Такой вариант запишет файл:
fs.outputJson(path.resolve(__dirname, '..', 'dir', 'foo', 'file.json'), {name: "foo"})

А такой нет:
fs.outputJson('../dir/foo/file.json', {name: "foo"})
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
netBeans и node.js s_baklanov Node.JS 1 03.11.2016 11:32
Взаимодействие клиентской части с Node.js Henguys Node.JS 5 10.06.2016 07:04
Недопонимание философии Node.js Voronar AJAX и COMET 10 25.02.2013 14:00
Востребованность разработчиков на Node.js danik.js AJAX и COMET 7 08.12.2012 22:49
Node.js Kolyaj Серверные языки и технологии 49 24.05.2010 22:29