Node.js, не вдається відкрити файли. Помилка: ENOENT, stat './path/to/file'


126

Я розробив програму node.js, використовуючи експрес-фреймворк на своєму комп’ютері, де вона працює нормально без скарг.

Однак, коли я запускаю програму на своєму пристрої SUSE Studio, де вона призначена для проживання, я отримую помилку при будь-якій взаємодії з файлами.

Error: ENOENT, stat './path/to/file'

Я перевірив правильність дозволів на файли, якими вони є. На моєму комп’ютері та моєму приладі працюють різні версії вузла, якщо це має значення.

Будь-які думки?


1
Оскільки шлях відносний, можливо, ви запускаєте його з іншого каталогу? Як ви генеруєте шлях і яка структура каталогу? А як ти працюєш вузлом?
loganfsmyth

1
Дякую, так, я запускав сценарій з іншого каталогу і нерозумно припускав, що шлях до файлу буде відносно самого сценарію. Я знав, що це щось таке просте :)

Це повинно бути виправленим. Чи можете ви додати якийсь код, який показує, як ви робите шлях, і для чого ви очікуєте вирішення? Якщо ви хочете, щоб це було відносно певного файлу, зазвичай, ви б це зробили__dirname + 'path/to/file';
loganfsmyth

Так, це я зараз зробив. Я запускав сценарій, виконуючи "node ~ / path / to / script.js" і очікував, що відносні посилання на файли в моєму сценарії будуть вирішені на "~ / path /" на "Спасибі!

Відповіді:


187

Шляхи, вказані з a, .відносяться до поточного робочого каталогу, а не до файлу сценарію. Таким чином, файл може бути знайдений, якщо ви запустите, node app.jsале не, якщо ви запустите node folder/app.js. Єдине виняток з цього є, require('./file')і це можливо лише тому, що requireіснує модуль, і таким чином відомо, з якого модуля він викликається.

Щоб зробити шлях відносно сценарію, ви повинні використовувати __dirnameзмінну.

var path = require('path');

path.join(__dirname, 'path/to/file')

або потенційно

path.join(__dirname, 'path', 'to', 'file')

11
Дякую; іноді подібні дрібниці, які важко знайти в документації, для новачків (як я!).

5

Тут використовується код для використання вашого app.js

Вхід вказує ім'я файлу

res.download(__dirname+'/'+input);
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.