Express.js - получить значение res.send

0
задан PrintlnParams 16 January 2019 в 18:07
поделиться

1 ответ

1114 Вот что я в итоге сделал. Я сохранил свою файловую структуру точно такой же, но вместо 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() (или, по крайней мере, все маршруты, для которых я хочу перехватить возвращаемое значение). Из-за этого и из-за того, что я представляю, что кто-то более знающий, чем я, возможно, сможет найти лучший способ сделать это, я не собираюсь принимать свой собственный ответ.

0
ответ дан PrintlnParams 16 January 2019 в 18:07
поделиться
Другие вопросы по тегам:

Похожие вопросы: