Zrobiłem tu założenie, że trasy są zadeklarowane w tej kolejności:
app.use(app.router);
app.use(express.static(path.join(__dirname, 'public')));
Jeśli tak jest w istocie, to posiada następujące sugestie:
Tutaj problemem jest to aplikacja .get ('/ *', ...) przechwyci wszystkie zapytania, które pasują, czyli w zasadzie wszystko. Twoje statyczne oprogramowanie pośrednie nie będzie miało szans na dostarczenie plików.
Jeśli usuniesz tę trasę, rzeczy powinny działać, ponieważ index.html
jest już w katalogu public
i może być obsługiwane przez statyczne oprogramowanie pośredniczące.
Dla dobrego wyjaśnienia, jak to działa, zobacz odpowiedź na to pytanie: node.js/express.js - How does app.router work?
Aktualizacja oparta na dodatkach do powyższego pytania:
pan stwierdził to jako bieżącego zachowania Twój serwer:
Wygląda na to, że wszystkie javascripts, o które prosi klient, są pobierane z informacjami o pliku index.html.
pan zadał pytanie:
Jak mogę zrobić udane pobieranie CSS/JS plików statycznych?
tego wymogu
chcę wszystkie żądania do serwera, na dowolnej trasie dostanie index.html i wszystkich jego JS & CSS assosiciated z.
Twoje pytanie i wymóg są ze sobą przeciwstawne. Serwer odeśle klientowi dokładnie to, co powiesz/skonfigurujesz. Zawsze albo odeśle index.html
, co jest dokładnie tym, o czym mówi twoje wymaganie, albo z powodzeniem obsłuży zarówno index.html
, jak i dowolny odnośnik CSS/Javascript, do którego odnosi się, co było oryginalnym stwierdzeniem problemu.
W jednym z komentarzy poniżej pan stwierdził:
powodem chcę to zrobić, dlatego używam szablonów, a index.html zawija każdy szablon. Używam kątowego na kliencie i zaczynam rozumieć, że będę musiał użyć silnika renderującego, aby to osiągnąć. Ponownie, mój kanciasty klient określa częściowy adres URL, a kiedy wysyła żądanie do: „/ częściowy/próbka” Muszę index.html zawinąć „sample.html” na przykład
Moje założenia oparte na to oświadczenie (popraw jeśli źle)
- używasz stronie klienta szablony
- pliki pobierasz z serwera są statyczne (czyli muszą być serwowane jak z serwer)
- Twoje trasy są obecnie zadeklarowane w tej kolejności
- app.use (app.router);
- app.use (express.static (path.join (__ dirname, "public")));
- nie robią żadnej stronie serwera templating (czyli wszystko znajduje się pod
public
gdzieś)
Jeśli te założenia są prawidłowe, poprawka jest robić to, co pierwotnie sugerowano i usunąć tę trasę:
app.get('/*', index);
Jeśli zrobisz to (zakładając, że zasoby są prawidłowo odwoływać):
- Twoja
index.html
zostanie pobrana z serwera za pośrednictwem statycznego oprogramowania pośredniego.
- Każdy css/js plik już wymieniony w index.html zostaną zwrócone z serwera za pomocą statycznego middleware
- Wszelkie prośby, aby załadować pliki szablonów (takie jak
sample.html
) będą obsługiwane przez statyczną middeware i wrócił do klient bez modyfikacji
Jeśli chcesz służyć tylko pliki statyczne, nie używasz oprogramowania pośredniczącego routera, to proste :) W rzeczywistości nie ma nawet potrzeby korzystania z Expressu w tym celu. – gustavohenke
, więc jak mogę to zrobić, jeśli chcę renderować plik index.html, który zawiera js? – ohadinho
https://npmjs.org/package/http-server – gustavohenke