Mam następujące lokalizacje plików:Jak udostępniać pliki statyczne za pośrednictwem Node.js lokalnie?
file:///Users/MyName/Developer/sitename/scripts (contains all .js files..)
file:///Users/MyName/Developer/sitename/css (contains all .css files..)
file:///Users/MyName/Developer/sitename/images (contains all .jpg/png/etc. files..)
file:///Users/MyName/Developer/sitename/sitename.html
file:///Users/MyName/Developer/sitename/server.js
Wewnątrz sitename.html
załadować wszystkie niezbędne pliki w następujący przykład:
<html>
<head>
<script src="scripts/somefile.js"></script>
</head>
...
</html>
ilekroć otworzy file:///Users/MyName/Developer/sitename/sitename.html
Więc wszystko działa bez zarzutu.
Jednak gdy próbuję załadować file:///Users/MyName/Developer/sitename/sitename.html
poprzez lokalny serwer node.js, że mam (lokalizację pliku serwera: file:///Users/MyName/Developer/sitename/server.js
) konfiguracja następująco:
var http = require("http");
var fs = require("fs");
fs.readFile('./sitename.html', function (err, html)
{
if (err) throw err;
http.createServer(function (request,response)
{
// serve site
if (request.url === "/")
{
response.writeHeader(200, {"Content-Type": "text/html"});
response.write(html);
}
response.end();
}).listen(8080);
});
sitename.html
znajduje i załadowany, ale wszystkie inne pliki, które mają zostać załadowane, nie mogą się załadować, ponieważ wszystkie mają przedrostek http://localhost:8080/
(http://localhost:8080/scripts/somefile.js
nie jest prawidłową ścieżką do pliku na przykład).
To wygląda tak szybko, jak jest tworzone przez serwer (wewnątrz http.createServer(.....);
) zmiany kontekstu i katalog nadrzędny staje się teraz http://localhost:8080/
zamiast file:///Users/MyName/Developer/sitename/
co ma sens Chyba jednak nie jest bardzo pomocne przy użyciu plików, które są nadal przechowywane lokalnie.
Jak to obejść? Czy fakt, że przechowuję server.js
(tylko na razie) w tym samym katalogu sprawia, że rzeczy są jeszcze bardziej zagmatwane?
Dzięki!
Hej wielkie dzięki za odpowiedź. Rzucę okiem na te 2 opcje, które zasugerowałeś. Ale tylko dlatego, że jestem na tym nowicjuszem, czy mógłbyś rozwinąć nieco więcej: Więc kiedy ktoś tworzy aplikację internetową i używa Node.js do obsługi aplikacji, a aplikacja ma dużo statycznych plików (oczywiście), robi to zawsze muszą używać "wtyczek", takich jak te, które zasugerowałeś, testując swoją aplikację lokalnie? Wydaje się to trochę dziwne, że Node nie ma domyślnej opcji określenia lokalizacji folderu macierzystego dla wszystkich plików statycznych, które będą wyświetlane. Jeszcze raz dziękuję za pomoc! –
Węzeł daje narzędzia do serwowania tych plików, po prostu trzeba go zaimplementować. Właśnie dlatego istnieje tak wiele modułów, ponieważ funkcjonalność po prostu nie wychodzi z pudełka. Można z całą pewnością obsługiwać plik za pomocą Node.js, ale trzeba by zaimplementować trasę na serwerze, która rozpoznaje żądanie "/style.css" i zlecić odczytanie tego pliku z dysku. –
Wielkie dzięki za wyjaśnienie, że Jeff –