node.js - 在 sails.js 中,如何访问 Controller 外部的 session 变量?

标签 node.js sails.js

在 Controller 中,这很简单。访问 session 变量很简单:

req.session.x = 1

但是,我如何访问外部 Controller ?喜欢服役吗?

module.exports.test = function() {
    // No req.session here?
};

最佳答案

您可以创建一个主 Controller ,为每个调用的路由 Controller 在您的所有服务中注册 reqres

这是我的主 Controller 的代码:

module.exports = function MainController() {

  var _this = this;

  function _execRouteMethod(req, res) {
    // Add here your services or whatever with a registration
    // of req and/or res variables
    ActiveUserService.registerRequest(req);
  }

  // Abstract function for calling registers before the original method
  function _abstractRouteMethod(functionName) {
    var funcSuper = _this[functionName];
    _this[functionName] = function(req, res) {
      _execRouteMethod(req, res);
      funcSuper(req, res);
    }
  }

  // Loop for all method that have req and res arguments
  for(var functionName in this) {
    if(typeof this[functionName] == 'function') {
      var args = /function[^\(]*\(([^\)]*)\)/.exec(
        this[functionName].toString()
      );
      if(args && args.length > 1) {

        args = args[1].split(',').map(function(arg) {
          return arg.trim()
        });

        if(args.length == 2 && args[0] == 'req' && args[1] == 'res') {
          _abstractRouteMethod(functionName);
        }
      }
    }
  }

};

现在您可以在任何 Controller 中调用它:

var MainController = require('./MainController');
MainController.call(MyController);

您的服务可以使用注册的reqres。例如,我在我的 ActiveUserService 中使用它是这样的:

var _request = null;

var ActiveUserService = {

  registerRequest: function(req) {
    _request = req;
  },

  isConnected: function () {
    return _request && _request.session.user ? true : false;
  },

  // ...

};

关于node.js - 在 sails.js 中,如何访问 Controller 外部的 session 变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22833573/

相关文章:

javascript - Node.js 中 ReadSync 调用期间长度超出缓冲区错误

mysql - 从索引表中高效查询

javascript - Angular 中的 JSON 数据

node.js - 如何在 Sails.js 中使用自定义路由中间件? (ExpressJS)

mongodb - 使用远程 Mongo DB 时无法加载 Sails

javascript - 使用grunt将jade模板编译为sails.js中的javascript函数

javascript - SailsJS 无法访问位于 asset/app 中的 index.html

javascript - 等待一个已经完成的 Promise 的性能开销是多少?

javascript - 了解 Express Node.js 中的虚拟主机

javascript - 类型错误:无法读取 null 的属性 '0'