Zbuduj serwer Express 5 krok po kroku: trasy, middleware, body JSON, pliki statyczne i obsługa błędów, a do tego generator serwera startowego i zmiany z wersji 4 do 5.
Express to mały framework webowy dla Node.js. Zainstaluj go przez npm install express, utwórz aplikację przez express(), dodaj trasy, takie jak app.get('/', handler), i uruchom ją przez app.listen(3000). Middleware, takie jak express.json(), działa przed Twoimi trasami, a handler błędów z czterema argumentami dodajesz na końcu.
Większość tutoriali o Express nadal pokazuje kod z wersji 4, który nie działa lub generuje ostrzeżenia w wersji 5, a ta jest teraz instalowana domyślnie. Ten przewodnik w całości używa Express 5, generuje serwer startowy z zaznaczonymi przez Ciebie częściami i kończy się tabelą zmian, na których ludzie się potykają przy aktualizacji starszego projektu.
Zaznacz w generatorze potrzebne funkcje: body JSON, pliki statyczne, router, stronę 404 i handler błędów.
Wybierz ES modules lub CommonJS zgodnie z Twoim package.json.
Skopiuj plik do index.js, uruchom npm install express, a potem node index.js.
Przeczytaj sekcje poniżej, aby dowiedzieć się, co robi każda część i czym wersja 5 różni się od 4.
Kolejność ma znaczenie: Express uruchamia middleware i trasy w kolejności rejestracji, więc parsery body idą pierwsze, a handler błędów ostatni.
W Express 5 asynchroniczna trasa, która rzuca wyjątek lub odrzuca obietnicę, trafia automatycznie do Twojego handlera błędów. Nie potrzebujesz już wrappera wokół każdej funkcji async.
Dla plików statycznych używaj path.join(__dirname, 'public') lub ścieżki bezwzględnej, aby serwer działał niezależnie od folderu, z którego go uruchamiasz.
Na produkcji ustaw NODE_ENV=production. Wbudowany handler błędów przestaje wtedy wysyłać odwiedzającym stack trace.
Najczęściej zadawane pytania
Jakiej wersji Node.js potrzebuje Express 5?
Express 5 wymaga Node.js 18 lub nowszego. Jeśli musisz zostać przy starszym Node, używaj Express 4, dopóki nie zaktualizujesz środowiska.
Dlaczego req.body jest undefined?
Dla tego żądania nie zadziałał żaden parser body. Dodaj przed trasami app.use(express.json()) dla JSON lub express.urlencoded() dla formularzy i upewnij się, że klient wysyła pasujący nagłówek Content-Type. W Express 5 nieprzetworzone body to undefined, a nie pusty obiekt.
Jak napisać trasę przechwytującą wszystko w Express 5?
Wildcardy muszą mieć teraz nazwę. Użyj app.get('/*splat', handler) zamiast '/*'. Aby dopasować także ścieżkę główną, otocz go nawiasami klamrowymi: '/{*splat}'.
Co robi next()?
Przekazuje żądanie do następnego pasującego middleware lub trasy. Wywołaj next(), aby kontynuować, next(err), aby przeskoczyć do handlerów błędów, albo wyślij odpowiedź, aby zatrzymać łańcuch. Jeśli zapomnisz o obu, żądanie zawiśnie.
Czy nadal używać body-parser?
Nie dla JSON i danych formularzy. express.json() i express.urlencoded() są wbudowane. Pamiętaj, że w Express 5 opcja extended parsera urlencoded ma domyślnie wartość false.
Trasy i parametry
Trasa to metoda, ścieżka i handler. Nazwane segmenty, takie jak :id, odczytujesz z req.params, query stringi z req.query, a przetworzone body z req.body.
Odpowiadaj przez res.json() dla danych, res.send() dla tekstu lub HTML, a res.status(404) dołączone przed którąkolwiek z nich ustawia kod. Express 5 przyjmuje w res.status() tylko liczby całkowite od 100 do 999.
Middleware w jednym akapicie
Middleware to funkcja req, res i next, która działa przed handlerem trasy. Może odczytać lub zmienić żądanie, zakończyć odpowiedź albo wywołać next(). Logowanie, sprawdzanie uwierzytelnienia, nagłówki CORS i parsowanie body to wszystko middleware, montowane przez app.use() dla każdej ścieżki lub przekazywane do pojedynczej trasy.
Utworzenie projektu
Instalacja i uruchomienie
Utwórz folder, zainicjuj package.json, oznacz go jako projekt ES module i zainstaluj Express.
Trasy we własnym pliku
Router to mini aplikacja. Zamontuj go pod prefiksem, aby każda ścieżka w środku była względem niego.
Błędy async trafiają do handlera błędów
W Express 5 odrzucona obietnica w trasie jest przekazywana za Ciebie. Handler z czterema argumentami, zarejestrowany na końcu, zamienia ją w odpowiedź.
Express 4 do 5: co się zmieniło
Express udostępnia codemody dla wielu z tych zmian: npx codemod@latest @expressjs/v5-migration-recipe.