/ / Express, nasłuchuj na wielu trasach - node.js, express

Wyraź, słuchaj na wielu trasach - node.js, express

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 № 1

Express 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.