Powiedzmy, że mam wiele miejsc, w których dzwonię pod numer response.send(someData)
. Teraz chcę utworzyć pojedynczy globalny przechwytywacz, w którym przechwytuję wszystkie metody .send
i wprowadzam pewne zmiany do someData
. Czy jest jakiś sposób w pliku express.js? (haki, słuchacze, przechwytujące, ...)?express.js - jak przechwycić response.send()/response.json()
7
A
Odpowiedz
17
można zdefiniować middleware jak poniżej (wzięty i modyfikowane z tego answer)
function modifyResponseBody(req, res, next) {
var oldSend = res.send;
res.send = function(data){
// arguments[0] (or `data`) contains the response body
arguments[0] = "modified : " + arguments[0];
oldSend.apply(res, arguments);
}
next();
}
app.use(modifyResponseBody);
3
Tak, jest to możliwe. Istnieją dwa sposoby, aby to zrobić, jeden jest do korzystania z biblioteki, która zapewnia przechwycenie, z możliwością uruchomienia go na podstawie konkretnego stanu: https://www.npmjs.com/package/express-interceptor
Inną opcją jest po prostu stworzyć swój własny middleware (dla express) w następujący sposób:
function modify(req, res, next){
res.body = "this is the modified/new response";
next();
}
express.use(modify);
Powiązane problemy
- 1. w express.js, jakikolwiek sposób przechwycić żądanie zarówno do json, jak i html w jednej funkcji?
- 2. Jak przechwycić część kwoty
- 3. Jak przechwycić błędy serwera node.js/express, takie jak EADDRINUSE?
- 4. Jak przechwycić sygnał w QML?
- 5. Jak przechwycić node.js wyraźne życzenie
- 6. Jak przechwycić dziennik uruchamiania Tomcat
- 7. Javascript: Jak przechwycić zmianę window.location
- 8. jak przechwycić traceback w geenie
- 9. Jak przechwycić wywołania metody instancji?
- 10. Jak przechwycić wszystkie zdarzenia dotyku?
- 11. Jak przechwycić odświeżenie strony? - ASP.NET
- 12. Express.js z websockets
- 13. statyczne pliki z express.js
- 14. Sesje z express.js + passport.js
- 15. Zamknięcie haka Express.js
- 16. Express.js Wyświetl "globals"
- 17. jak zainstalować starą wersję pliku express.js
- 18. express.js: jak pobrać strumień jako plik?
- 19. Express.js - jak ustawić nagłówek dla wszystkich odpowiedzi
- 20. Jak ponownie załadować bieżącą stronę w Express.js?
- 21. Jak ustawić nagłówek odpowiedzi dla zasobów express.js?
- 22. Jak używać części w układzie Express.js?
- 23. Jak skonfigurować certyfikat SSL dla serwera express.js?
- 24. Jak poprawnie obsłużyć SIGINT za pomocą Express.js?
- 25. Express.js res.render nazwa pliku kropki
- 26. Jak przechwycić wideo z kamery internetowej?
- 27. Jak mogę przechwycić wywołanie konstruktora w Groovy?
- 28. HttpClient 4 - jak przechwycić ostatni przekierowany URL
- 29. Bash Jak przechwycić stderr do zmiennej?
- 30. Jak przechwycić klawisz specjalny (alt/ctrl)?
próbowałem powyżej i to działa. Jednak res.send jest wywoływany dwukrotnie dla wszystkich metod HTTP (POST, PUT, DELETE) i jest wywoływany tylko raz dla GET. Każdy pomysł, dlaczego res.send jest wywoływany dwa razy? – KBJ
res.send = oldSend dodanie powyższej linii przed wywołaniem metody oldSend rozwiązuje wyżej wspomniany problem. Dzięki! – KBJ
Dzięki @Jugz, wyjaśnienie, w jaki sposób to rozwiązuje problem, byłoby wspaniałe, dzięki. – Aukhan