【问题标题】:How to get access to req (request) property from service如何从服务访问 req(请求)属性
【发布时间】:2014-07-08 10:51:38
【问题描述】:

通过控制器的动作访问session属性很简单。

var SomeController = {
  someAction: function(req, res) {
    // no we have access to session object
    if (!req.session.hasOwnProperty('flash')) {
      req.session.flash = [];
    } 
  }
}

但我需要从服务中访问session 对象。 示例文件app/services/my_servise.js:

module.exports = {
  some_method: function() {
    // here at i need to get access to session object?
    // is it possible?   
  }
}

【问题讨论】:

    标签: node.js session express sails.js


    【解决方案1】:

    请参阅this answer,详细讨论为什么您不能在模型类方法中访问会话参数;完全相同的答案也适用于服务。结果是,如果您想访问服务代码中的会话,您必须将请求对象作为参数传递给您的服务方法。

    【讨论】:

      【解决方案2】:

      解决方案很大程度上取决于调用 my_service.js 的时间以及使用它的目的。这是最简单的一个:

      var my_service, SomeController;
      my_service = require('./services/my_service.js'); // Assuming this module is in the /app directory.
      SomeController = {
          'someAction': function(req, res) {
              if (!req.session.hasOwnProperty('flash')) {
                  req.session.flash = [];
              }
              my_service.some_method(req);
          }
      }
      

      /app/services/my_service.js:

      module.exports = {
          'some_method': function (req) {
              // use req.session
          }
      };
      

      如果这不是您要查找的内容,请多解释一下 my_service.js 的用法。

      【讨论】:

      • 注意,您不必require服务,因为Sails会自动全球化所有服务文件。
      • @ScottGress 谢谢,我没有看到它必须与sails.js 一起使用。不过我不熟悉那个框架。
      • 我需要 my_service.js 来保存和访问 Flash 消息。示例:我将 POST 请求发送到 /user/login 操作。从数据是有效的。然后我将用户从当前操作重定向到/user/welcome,我想显示一些在/user/login 操作中生成的消息。我需要使用会话来临时存储 lash 消息。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-06-22
      • 1970-01-01
      • 1970-01-01
      • 2012-07-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多