Допустим, у меня есть несколько мест, где я звоню response.send(someData)
. Теперь я хочу создать один глобальный перехватчик, где я поймаю все методы .send
и внесем некоторые изменения в someData
. Есть ли способ в express.js? (крючки, слушатели, перехватчики, ...)?express.js - как перехватить response.send()/response.json()
7
A
ответ
17
Вы можете определить промежуточное программное обеспечение, как показано ниже (взято и редактировался этого 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
Да, это возможно. Есть два способа сделать это, один должен использовать библиотеку, которая обеспечивает перехват, с возможностью запуска его на основе конкретных условий: https://www.npmjs.com/package/express-interceptor
Другой вариант просто создать свой собственный промежуточное программное обеспечение (для экспресс) следующим образом:
function modify(req, res, next){
res.body = "this is the modified/new response";
next();
}
express.use(modify);
Смежные вопросы
- 1. Как перехватить многостраничный файловый поток в Express.js?
- 2. Node.js/Express.js - Как переопределить/перехватить функцию res.render?
- 3. Как перехватить нажатие клавиши?
- 4. Как перехватить исключение Interop?
- 5. Как перехватить запрос заканчивается?
- 6. Как «перехватить» методы?
- 7. Как перехватить/изменить the_category?
- 8. Как перехватить событие NotifyPropertyChange
- 9. Как перехватить нажатие клавиши?
- 10. Как перехватить фильтры Linq
- 11. Как перехватить исключение преобразования?
- 12. Как перехватить запрос SELECT
- 13. Как перехватить Cmd + Q
- 14. Как перехватить ошибки Selenium?
- 15. Как перехватить вызовы PDO?
- 16. Как перехватить операции EF?
- 17. Как перехватить вход IRB?
- 18. Как перехватить обещание?
- 19. РИА: как перехватить данные
- 20. Как перехватить Http-трафик
- 21. Как перехватить вызов
- 22. Как перехватить конструктор
- 23. Как перехватить поворот iPhone
- 24. Как перехватить событие onclick
- 25. Как перехватить статический курьер?
- 26. Как перехватить MIDI-сообщения?
- 27. Как перехватить пароли Laravel?
- 28. Как перехватить веб-запрос
- 29. Как вызвать обработчик express.js из другого обработчика
- 30. express.js как показать изображение?
Я попытался выше, и она работает. Однако res.send вызывается дважды для всех HTTP-методов (POST, PUT, DELETE) и вызывается только один раз для GET. Любая идея, почему res.send вызывается дважды? – KBJ
res.send = oldSend , добавив вышеприведенную строку перед вызовом метода oldSend, устраняет вышеупомянутую проблему. Благодаря! – KBJ
Спасибо @Jugz, объяснение тому, как это исправляет проблему, было бы здорово, спасибо. – Aukhan