Ответ 1
У вас есть несколько вариантов:
Прикрепите значение к объекту
req
:app.get('/', isMobile, function(req, res){ // Now in here req.phone is md.phone. You can use it: req.phone.makePrankCall(); }); function isMobile(req, res, next) { var MobileDetect = require('mobile-detect'); md = new MobileDetect(req.headers['user-agent']); req.phone = md.phone(); next();// No need to return anything. }
Это количество промежуточного программного обеспечения Express/Connect, передающего значения. Например, bodyParser, который присоединяет свойство body к объекту запроса, или промежуточное программное обеспечение сеанса, которое присоединяет свойство сеанса к объекту запроса.
Обратите внимание, что вы должны быть осторожны, чтобы никакая другая библиотека не использовала это свойство, чтобы не возникало конфликтов.
Не делайте это промежуточным ПО, просто используйте функцию напрямую. Если он не асинхронный, как описано выше, и не будет использоваться глобально для всех маршрутов (не будет что-то вроде этого:
app.use(isMobile)
), это также хорошее решение:app.get('/', function(req, res){ var phone = isMobile(req); phone.makePrankCall(); }); function isMobile(req) { var MobileDetect = require('mobile-detect'); md = new MobileDetect(req.headers['user-agent']); return md.phone(); }
Если это дорого для вычисления, и вы можете использовать его в более чем одном промежуточном программном обеспечении, вы можете кэшировать его с помощью карты слабых карт.