Chcę służyć index.html
i /media
podkatalog jako pliki statyczne. Plik indeksu powinien być wyświetlany zarówno pod adresem URL, jak /index.html
i pod nim /
.
mam
web_server.use("/media", express.static(__dirname + '/media'));
web_server.use("/", express.static(__dirname));
ale druga linia najwyraźniej obsługuje całość __dirname
, łącznie ze wszystkimi zawartymi w niej plikami (nie tylko index.html
i media
), których nie chcę.
Też próbowałem
web_server.use("/", express.static(__dirname + '/index.html'));
ale dostęp do podstawowego adresu URL /
prowadzi następnie do żądania web_server/index.html/index.html
(podwójnego index.html
składnika), co oczywiście kończy się niepowodzeniem.
Jakieś pomysły?
Nawiasem mówiąc, nie mogłem znaleźć absolutnie żadnej dokumentacji w Express na ten temat ( static()
+ jego parametry) ... frustrujące. Link do dokumentu jest również mile widziany.
express.static()
jest obsługiwany przezserve-static
pakiet oprogramowania pośredniego. dokumentację można znaleźć na stronie npmjs.com/package/serve-static lub github.com/expressjs/serve-static .Odpowiedzi:
express.static()
oczekuje, że pierwszym parametrem będzie ścieżka do katalogu, a nie nazwa pliku. Sugerowałbym utworzenie kolejnego podkatalogu, aby zawierał twójindex.html
i używał go.Udostępnianie plików statycznych w dokumentacji Express lub bardziej szczegółowej
serve-static
dokumentacji , w tym domyślne zachowanie podczas udostępnianiaindex.html
:źródło
express.static
oczekuje, że ten jeden parametr będzie ścieżką ....Jeśli masz tę konfigurację
To powinno dostać to, czego chciałeś
Sztuką jest pozostawienie tej linii jako ostatniej rezerwy
Jeśli chodzi o dokumentację, ponieważ Express korzysta z oprogramowania pośredniego Connect, łatwiej było mi spojrzeć bezpośrednio na kod źródłowy Connect.
Na przykład ten wiersz pokazuje, że obsługiwany jest index.html https://github.com/senchalabs/connect/blob/2.3.3/lib/middleware/static.js#L140
źródło
Application.configure()
został udokumentowany jako starsza wersja w wersji 3.x i usunięty w wersji 4.x. Zobacz odpowiedź ChrisaCantrella na zaktualizowany przykład.__dirname
? Jaka jest jego wartość?W najnowszej wersji ekspresu „createServer” jest przestarzały. Ten przykład działa dla mnie:
źródło
__file__
którego używasz zos.path.dirname(os.path.realpath(__file__))
public/teams/logo.png
?res.sendFile
iexpress.static
oba będą na to działaćGdzie
public
jest folder, w którym znajduje się kod po stronie klientaJak sugerowano przez @ATOzTOA i wyjaśnione przez @Vozzie ,
path.join
bierze ścieżki dołączyć jako argumentów+
przechodzi jeden argument na ścieżce.źródło
path.join
przyjmuje ścieżki do przyłączenia jako argumenty,+
przekazuje pojedynczy argument do ścieżki.path.join(public + 'index.html')
wpath.join(public, 'index.html')
A kiedy już to zmienisz__dirname + "/public/"
napath.join(__dirname, 'public')
źródło
źródło
użyj poniżej w pliku app.js
(folderName to folder zawierający pliki) - pamiętaj, że dostęp do tych zasobów można uzyskać bezpośrednio przez ścieżkę serwera (tj. http: // localhost: 3000 / abc.png (gdzie jak abc.png znajduje się w folderze folderName)
źródło