Node J中所有控制器的全局variables
我想要一个variables,可以通过我的节点项目中的所有控制器访问。 目前在一个控制器中我有:
var ua = req.headers['user-agent']; var isMobile = "no"; if(/mobile/i.test(ua)) isMobile="yes";
为所有控制器复制过去所有这些都是毫无意义的,并将isMobilevariables传递给视图。 我想获得isMobile的价值一次,然后通过我想要从我的控制器。
有没有一个简单的方法来做到这一点,而不是在每个控制器粘贴这4行代码复制?
谢谢
您需要为此使用Sails 策略 :
// /api/policies/isMobile.js module.exports = function(req, res, next) { var ua = req.headers['user-agent']; req.isMobile = /mobile/i.test(ua); next(); }
// /config/policies.js module.exports.policies = { '*': 'isMobile' };
这将在每个控制器操作之前运行代码,并允许您访问所有自定义控制器代码中的req.isMobile var。
一个真正的全局variables并不是特别的select,因为任何高于1的并发都可能导致意想不到的行为。 因为这是独特的请求本身的东西, req
对象可能是你最好的select。
假设你可以在任何地方使用req
对象来使用这个标志,你可以在任何一点(最好是在请求/响应周期的早期)简单地向req
对象添加一个属性。 在添加这个属性之后,它应该可以在任何可以访问请求的地方使用。
req.isMobile = /mobile/i.test(req.headers['user-agent']) ? 'yes' : 'no';
或者如果有中间件这样的概念expression风帆
function isMobile(req, res, next) { req.isMobile = /mobile/i.test(req.headers['user-agent']) ? 'yes' : 'no'; next(); }