2012-06-14 19 views
16

W ekspresowym, mam zdefiniowane niektóre trasyJak przechwycić node.js wyraźne życzenie

app.post("/api/v1/client", Client.create); 
app.get("/api/v1/client", Client.get); 
... 

Mam zdefiniowane jak obsługiwać żądania wewnątrz kontrolera Client. Czy istnieje sposób, w jaki mogę wykonać wstępne przetwarzanie żądań, zanim przejdę do nich w moim kontrolerze? W szczególności chcę sprawdzić, czy wywołujący API jest uprawniony do dostępu do trasy, używając pojęcia poziomów dostępu. Każda rada byłaby doceniona.

+0

Pomyśl o połączeniu/ekspresie jako masażysta z wieloma rękami, każda ręka jest oprogramowaniem pośredniczącym, które masuje Twoją prośbę do właściwej odpowiedzi. To, co mówi Ryan Olds, jest w 100% poprawne. ;) – Pickels

Odpowiedz

39

Możesz zrobić to, czego potrzebujesz na kilka sposobów.

Spowoduje to umieszczenie oprogramowania pośredniego, które będzie używane przed naciśnięciem rutera. Upewnij się, że router został dodany po app.use() po. Kolejność oprogramowania pośredniego jest ważna.

app.use(function(req, res, next) { 
    // Put some preprocessing here. 
    next(); 
}); 
app.use(app.router); 

Można również użyć oprogramowania pośredniego trasy.

var someFunction = function(req, res, next) { 
    // Put the preprocessing here. 
    next(); 
}; 
app.post("/api/v1/client", someFunction, Client.create); 

Spowoduje to wykonanie etapu wstępnej obróbki dla tej trasy.

Uwaga: Upewnij się, że twoje wywołania app.use() są przed definicjami trasy. Definiowanie trasy automatycznie dodaje app.router do łańcucha oprogramowania pośredniego, które może umieścić go przed oprogramowaniem pośredniczącym zdefiniowanym przez użytkownika.

+0

Dziękuję bardzo, to jest niesamowita odpowiedź! –

+0

Piękne! Dzięki, Ryan – luigi7up

+0

@ ryan-olds, Jak mogę sprawdzić "Content-Type"? Muszę ustawić datę wygaśnięcia tylko na JSON, nie we wszystkich okolicznościach. –