res.send()
из маршрута я прикрепил объект, который я бы отправил, к объекту res
и затем вызвал next()
в конце моего маршрута. Так, например, res.send({message:'blah'});
становится res.return = {message:'blah'}; next();
. Я использую .return
, потому что я не верю, что такое свойство существует в объекте res
по умолчанию, и я нахожу его достаточно описательным для моих целей. Затем в моем postRoute
промежуточном программном обеспечении я могу легко получить доступ к res.return
, после чего я вызываю return res.send(res.return)
.
Используя мой пример из вопроса (app.js
остается именно таким, каким вы его видите):
/* FILE: /routes/myRoute */
...
router.post('/myRoute', [], (req, res, next) => {
if(theConditionIsMet()) {
res.return = { message:'The condition was met.' };
} else {
res.return = { message:'The condition was not met.' };
}
next();
});
....
router.post('/anotherRoute', [], (req, res, next) => {
// In this route I don't need to intercept the response, so I just do it like normal.
return res.send({ message:'Feels good, man.' });
});
...
/* FILE: /middleware/postRoute */
const postRoute = function(req, res, next) {
if(res.hasOwnProperty('return') {
return res.send(res.return);
}
};
module.exports = { postRoute };
Один недостаток, который я уже вижу, состоит в том, что теперь мне придется реструктурируйте все мои маршруты, чтобы использовать этот метод res.send()
(или, по крайней мере, все маршруты, для которых я хочу перехватить возвращаемое значение). Из-за этого и из-за того, что я представляю, что кто-то более знающий, чем я, возможно, сможет найти лучший способ сделать это, я не собираюсь принимать свой собственный ответ.