Node.js, nie można otwierać plików. Błąd: ENOENT, stat „./path/to/file”

126

Stworzyłem program node.js przy użyciu frameworka ekspresowego na moim komputerze, gdzie działa dobrze bez żadnych skarg.

Jednak gdy uruchamiam program na moim urządzeniu SUSE Studio, na którym jest przeznaczony, otrzymuję błąd przy każdej interakcji z plikiem.

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

Sprawdziłem, czy uprawnienia do plików są poprawne, którymi są. Jeśli to ma znaczenie, na moim komputerze i urządzeniu działają różne wersje węzła.

jakieś pomysły?


źródło
1
Ponieważ ścieżka jest względna, być może uruchamiasz ją z innego katalogu? Jak generujesz ścieżkę i jaka jest struktura katalogów? A jak działa Node?
loganfsmyth
1
Dzięki, tak, uruchamiałem skrypt z innego katalogu i głupio założyłem, że ścieżka pliku będzie względna w stosunku do samego skryptu. Wiedziałem, że to coś prostego :)
Powinien dać się naprawić. Czy możesz dodać kod pokazujący, w jaki sposób tworzysz ścieżkę i czego oczekujesz, że rozwiąże to? Jeśli chcesz, aby był względny do określonego pliku, zwykle zrobiłbyś to__dirname + 'path/to/file';
loganfsmyth
Tak, to właśnie zrobiłem teraz. Uruchomiłem skrypt, wykonując polecenie „node ~ / path / to / script.js” i spodziewałem się względnych odniesień do plików w moim skrypcie, aby rozwiązać problem jako „~ / ścieżka / do„ Dzięki!

Odpowiedzi:

187

Ścieżki określone za pomocą a .są względne w stosunku do bieżącego katalogu roboczego, a nie względem pliku skryptu. Więc plik może zostać znaleziony, jeśli uruchomisz, node app.jsale nie, jeśli uruchomisz node folder/app.js. Jedynym wyjątkiem jest require('./file')i jest to możliwe tylko dlatego require, że istnieje na moduł, a zatem wie, z jakiego modułu jest wywoływany.

Aby utworzyć ścieżkę względem skryptu, musisz użyć __dirnamezmiennej.

var path = require('path');

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

lub potencjalnie

path.join(__dirname, 'path', 'to', 'file')
loganfsmyth
źródło
11
Dzięki; czasami takie małe rzeczy są trudne do znalezienia w dokumentacji dla początkujących (takich jak ja!).
5

Tutaj kod do korzystania z pliku app.js.

input określa nazwę pliku

res.download(__dirname+'/'+input);
AmirtharajCVijay
źródło