Кто-нибудь знает какие-либо проблемы, которые могут возникнуть при передаче объектов ответа или запроса помощникам?
Да, при передаче этих параметров могут возникнуть некоторые проблемы, особенно res
,Например, вы можете res.send
несколько раз (по одному в каждой функции), что вызовет исключение.
Сценарий
Более конкретный пример - это
routeHandler((req, res) => {
helperOne(req, res);
helperTwo(req, res);
});
На основев некоторых случаях я хочу остановиться и вернуть ошибку из helperOne
, а не выполнять код из helperTwo
.Мои определения этих функций таковы:
helperOne = (req, res) => {
const dataPoint = req.body.dataPoint; // a number for example
if (number > 10) {
return res.send("This is not valid. Stopping here...");
} else {
console.log("All good! Continue..");
}
}
helperTwo = (req, res) => {
res.send("Response from helperTwo");
}
Тогда, скажем, у меня действительно есть req.body.dataPoint = 10
, и теперь я ожидаю, что мой routeHandler
остановится после return res.send
в первом блоке моегоif
оператор в helperOne
.
Это не будет работать должным образом, потому что return
будет относиться только к helperOne
, который является возвращающей функцией.Другими словами, не будет распространяться на routeHandler
.
. В конце концов, будет сгенерировано исключение, потому что routeHandler
вызовет helperTwo
и попытается отправить ответ снова .
Решение
- Не отправлять
req
или res
.Просто передайте необходимые данные и обработайте ответ в вашем основном обработчике - Еще лучшей альтернативой является использование Express Middlewares .Поскольку у вас есть несколько «последовательных» обработчиков , вы можете объединить несколько промежуточных программ, что ближе к стандартному способу Express.JS