Node.js 如何从服务访问req(请求)属性

Node.js 如何从服务访问req(请求)属性,node.js,session,express,sails.js,Node.js,Session,Express,Sails.js,通过控制器的操作可以轻松访问会话属性 var SomeController = { someAction: function(req, res) { // no we have access to session object if (!req.session.hasOwnProperty('flash')) { req.session.flash = []; } } } 但我需要从服务中访问会话对象。 示例文件app/services/my_se

通过控制器的操作可以轻松访问
会话
属性

var SomeController = {
  someAction: function(req, res) {
    // no we have access to session object
    if (!req.session.hasOwnProperty('flash')) {
      req.session.flash = [];
    } 
  }
}
但我需要从服务中访问
会话
对象。 示例文件
app/services/my_servise.js

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

解决方案在很大程度上取决于何时调用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的用法。

有关为什么不能在模型类方法中访问会话参数的详细讨论,请参阅;同样的答案也适用于服务业。结果是,如果希望访问服务代码中的会话,则必须将请求对象作为参数传递给服务方法

注意,您不必
要求
该服务,因为Sails会自动全球化所有服务文件。@ScottGress谢谢,我没有看到它必须与Sails.js一起工作。不过我不熟悉这个框架。我需要我的_service.js来保存和访问flash消息。示例:我向
/user/login
操作发送POST请求。从数据是有效的。然后我将用户从当前操作重定向到
/user/welcome
,我想显示在
/user/login
操作中生成的一些消息。我需要使用会话来临时存储lash消息。