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(); }