Buduję interfejs API REST w oparciu o ekspresowe, chcę ostrzec użytkownika, gdy użył niewłaściwego czasownika HTTP dla swojego żądania.
Obecnie dodaję
app.all("/", (req, res) => {
answer(req, res, {code: 400, error: "Wrong method"});
});
po każdej trasie, która zaczyna być nie do pominięcia, wolałbym mieć ją w jednym miejscu i wymienić wszystkie trasy, których chcę słuchać.
Czy istnieje sposób na zrobienie czegoś takiego:
app.all(["/", "/signup", "/login"], (req, res) => {
answer(req, res, {code: 400, error: "Wrong method"});
});
tak że mam tylko jeden punkt awarii, zamiast sprawdzać każdą trasę?
Odpowiedzi:
1 dla odpowiedzi № 1Express używa path-to-regexp do dopasowaniatrasy trasy; przejrzyj dokumentację path-to-regexp, aby poznać wszystkie możliwości definiowania ścieżek tras. Express Route Tester to przydatne narzędzie do testowania podstawowych tras Express, chociaż nie obsługuje dopasowywania wzorców.
Możesz użyć /^(signup|login)/(.+)/
. Widzieć DOCS
W Twoim przypadku:
app.all(["/^(signup|login)/(.+)/"], (req, res) => {
answer(req, res, {code: 400, error: "Wrong method"});
});
2 dla odpowiedzi nr 2
Ścieżki mogą być również wyrażeniami regularnymi, więc coś podobnego powinno działać:
app.all(/(signup|login)/, (req, res) => {
answer(req, res, {code: 400, error: "Wrong method"});
});
1 dla odpowiedzi nr 3
Możesz zdefiniować funkcję za pomocą kontroli ścieżki i metody adresu URL i użyć jej w oprogramowaniu pośrednim przekazywanym do aplikacja poradzić sobie z tą sytuacją błędu.
Po prostu zdefiniuj to przed swoimi trasami.
Oto przykład:
app.use(function(req, res, next){
if (checkIfIsWrongMethod(req)) {
answer(req, res, {code: 400, error: "Wrong method"});
} else {
next();
}
});
Oto expressjs FAQ.