在 sails.js 中,如何访问控制器外部的会话变量?

2024-04-03

在控制器中,这很容易。访问会话变量很简单:

req.session.x = 1

但是,我如何访问该外部控制器?喜欢服役吗?

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

您可以创建一个将注册的主控制器req and res在您调用的每个路由控制器的所有服务中。

这是我的主控制器的代码:

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

};

现在您可以在任何控制器中调用它:

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

您的服务可以使用req and res挂号的。例如,我在 Active UserService 中使用它,如下所示:

var _request = null;

var ActiveUserService = {

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

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

  // ...

};
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 sails.js 中,如何访问控制器外部的会话变量? 的相关文章

  • Bot Framework Node.js 发送给特定用户的临时消息

    我已经盯着这个问题好几个小时了 找不到解决方案 即使根据所有建议 它应该很容易 https learn microsoft com en us bot framework nodejs bot builder nodejs proactiv
  • npmjs.org - 找不到自述文件

    我是 npm 包的主要作者scramjet 一个月以来 我遇到了关于可视性的问题README md在 npmjs 中 The npm 中的超燃冲压发动机包 https www npmjs com package scramjet shows
  • 如何解决 Socket.io 404(未找到)错误?

    我正在使用 Socket io 和 Express 在我的项目中 我有一个登录页面和一个主页 当我成功登录时 我导航到 localhost 3000 home 并收到以下错误 GET http localhost 3000 socket i
  • Nodejs Express中间件函数返回值

    我正在使用 NodeJS 和 Express 我有以下路线 中间件功能是Mobile 如果我不使用 return next 在 isMobile 函数中 应用程序会卡住 因为 NodeJS 不会移至下一个函数 但我需要 isMobile 函
  • Node.js 和 Passport 对象没有 validPassword 方法

    我正在使用 Node js Express Passport 创建一个简单的身份验证 本地 到目前为止我所达到的效果是 当输入错误的用户名或密码时 用户将被重定向到错误页面 但是当用户输入正确的用户名和密码时 我收到此错误 node mod
  • 在回调中使用await(Microsoft Bot Framework v4 Nodejs)

    我正在尝试将回复发送回chatbot emulator从内部回调 async getUserDetails step console log inside get userdetaiuls modeiule this userDBObjec
  • 如何使用remark将markdown解析为json

    The 备注站点 https remark js org 有一个 AST 浏览器的链接 用于输出备注 https astexplorer net gist 0a92bbf654aca4fdfb3f139254cf0bad ffe102014
  • 如何将udp发送到udp node.js服务器?

    我对此很陌生 所以我真的不知道我在做什么 但我已经设置了一个 node js udp 服务器 我想从客户端 来自网站 向它发送一个数据包 但我不知道如何在 javascript 中做到这一点 或者是否可能 我不是在研究如何从 Node js
  • 在heroku上部署时出错,/bin/sh: 1: webpack: not found

    这是我在 heroku 网站上手动部署时遇到的错误 首先 我在 json 文件中遇到错误 因此我指定了正在运行的 npm yarn 和 node 版本 这些错误似乎已经清除 现在我就是这样的人 并且已经搜索了谷歌 但似乎找不到太多关于修复它
  • 在node.js中加载并执行外部文件

    从另一个节点js文件运行一个节点js文件是否容易 可能 例如 我有两个文件 test1 js 和 test2 js 我想从 test2 js 执行 test1 js 文件 我认为完成你想做的事情的更好方法是按照我的其他答案建议的去做 但是要
  • 具有 Firebase (FCM) 推送通知的 Node js

    我正在使用 Node js 开发 REST api 并且有一个休息端点来发送 firebase 推送通知 我的代码如下 const bodyParser require body parser var cors require cors v
  • 在 mac-os-x Yosemite 上调用“npm”时,Jenkins 构建步骤失败

    在开始之前 我想说我已经检查过这些答案 Jenkins 构建步骤在 npm install 上失败 https stackoverflow com questions 11564508 jenkins build step fails on
  • 如何在node.js中的一定时间后强制解决承诺? [复制]

    这个问题在这里已经有答案了 我正在尝试从其 url 下载大量图像 然后在 Node js 中创建一个 PDF 文件 我正在使用图片下载器 https www npmjs com package image downloader模块下载承诺链
  • node.js 安装向导提前结束

    我无法安装 node js 0 8 9 我是通过安装向导完成的 每次安装结束时我都会收到消息 Node js 安装向导提前结束 会是什么呢 谢谢 这可能会对将来的某人有所帮助 我从安装程序中收到类似的消息 发现我可以转到命令提示符并使用命令
  • 使用 Node.js mongodb 本机调用 db.destroyDatabase 时,什么可能导致“拓扑被破坏”错误?

    我正在使用 Node js Mongodb 本机驱动程序运行一些集成测试 每个测试都涉及连接到数据库 验证它是否尚不存在 例如 没有任何带有文档的集合 运行测试 然后删除数据库 高级代码如下 const runSafeTest functi
  • ReferenceError:找不到变量:需要

    我在加载时遇到问题node modules到我的网页之一 我已经安装了 npm node js 并且我想使用require 函数在我的网站上初始化 Firebase 我不知道为什么 但它抛出引用错误 ReferenceError 找不到变量
  • Node.js 每个用户一个会话

    如何防止我的用户同时从两个设备登录我的系统 因此 如果用户从计算机登录 当他从不同的计算机登录时 首先会自动关闭会话 不需要使其实时 我使用node js express js mongoose passport connect mongo
  • 由于预发布,Node 应用程序无法运行

    即使安装成功 我也会安装无效的软件包 顺便说一句 这个问题与答案相关 关于版本控制的问题 https stackoverflow com questions 27628153 npm versioning how does this edg
  • 何时不使用承诺[关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 在阅读了数十篇关于 es6 Promise 有多伟大以及为什么我们应该实现它们的文章之后 我有这样的感觉 ALL我的 不平凡的 JavaScri
  • Express.js Passport认证自动失败跳过策略

    UPDATE 我已将代码从护照本地注册内部移至单独的处理程序 并且运行良好 问题在于 Passport 和本地注册的使用 但我不知道为什么 我使用 Node js Express Passport 进行身份验证和注册设置 这是以前使用过的标

随机推荐

  • GetFileFromApplicationUriAsync、CopyAsync、AsStreamForRead 未在 Uno 平台中实现。解决方法?

    我尝试使用以下方法 但它们都显示为未实现在 Uno Android 中 我能做些什么 是否有 Xamarin Essentials选择 或其他NuGet包 或者我应该使用本机实现在各个平台上 是否有可能实施它直接在宇野 var pdfFil
  • Go中是否有类似于finally()的东西与init()相反?

    Go 中是否有一些与此相反的东西init 在包里面做什么 这一点Go团队之前讨论过 结论是不添加对其的支持 引用minux https groups google com forum topic golang nuts qBQ0bK2zvQ
  • 如何为我的音频应用程序获得可靠的定时?

    我有一个音频应用程序 其中所有声音生成工作都是通过纯数据 使用 libpd 完成的 我用 swift 编写了一个特殊的音序器 它控制多个序列的开始 停止播放 由合成引擎以纯数据播放 到目前为止 我完全避免在应用程序的任何方面使用 Core
  • Java:浮点格式取决于区域设置[重复]

    这个问题在这里已经有答案了 我住在比利时 一般来说 在数学中 我们用逗号写小数 如下所示 3 141592这也是我的结果format浮子 System out println String format f 3 141592 So the
  • Google App Engine 目前在哪些国家和地区被屏蔽?

    我经营一个网站 您可以在世界任何地方聘请记者 我们在 150 个国家 地区设有记者 它托管在 App Engine 上 有时我们会收到记者发电子邮件给我们 说我们的网站无法从他们所在的地方访问 具体错误是 您的客户端无权从此服务器获取 UR
  • VBA通过构造继承,构造函数不起作用? [复制]

    这个问题在这里已经有答案了 我刚刚开始使用 VBA 中的类 并且遵循概述的 构造继承 方法here https www theartofquantfinance com inheritance by construction in vba
  • UILabel 的变量 IBOutlet 名称?

    呃 这里遇到了一些麻烦 我在 Interface Builder 中有 4 个显示标签 在视图控制器中设置为 IBOutlet 我已经用这些名字设置了它们 标签1 标签2 标签3 标签4 我想更改随机选择的标签的标签文本 我正在尝试这个 在
  • Microsoft Visual C++ Runtime Package 框架在清单中缺少框架依赖项声明

    我在适用于 Windows 8 1 的 Windows 应用程序认证工具包上收到以下错误 应用程序清单测试检测到以下错误 XXX 需要 对 Microsoft Visual C 运行时包的依赖 Microsoft VCLibs 110 00
  • jQuery:获取给定“y”位置上方的元素

    如何使用 jQuery 以优雅的方式做到这一点 Apply z属性 例如 红色背景 给 div 的每个孩子parent当它们的位置高于给定的顶部偏移量时y 我尝试过不同的方式 但我对其中任何一个都不满意 我知道必须有一种简短而优雅的方法来做
  • 将 Django 开发数据库 (.sql3) 迁移到 Heroku

    如何将 Django sql3 开发数据库迁移到 heroku Per here https stackoverflow com questions 14500631 how can i upload a db to heroku and
  • Django 权限,自己编码还是使用应用程序?

    这个问题 我认为 是关于 Django 中的对象 行级别权限 我们正在构建一个社区 需要能够根据用户采取的操作设置权限 例如 在您发布了如此多的答案之前 您不应该能够启动线程 此外 用户应该能够删除属于自己的内容 根据 Django 文档
  • 暂停 knockout.js 1.2.1 中的绑定

    淘汰赛中有暂停和恢复绑定的选项吗 版本 knockout js 1 2 1 我们需要暂停绑定的原因如下 在某些操作过程中 我们必须从服务器加载大量数据 例如 多个选择的整个数据都已更改 有些表的行是动态添加的等 现在 在当前场景中 表单与视
  • 如何定期刷新Excel中的数据库数据?

    在我正在制作的 Excel 电子表格 VBA 脚本中 我需要从数据库调用数据 并每 5 分钟刷新一次值 该程序从按下按钮开始 并且应该连续运行 直到用户中断执行 我目前不确定如何让 Excel VBA 等待 5 分钟而不暂停电子表格 并且理
  • 布尔表达式+短路

    我想用布尔表达式 短路求值打印一条消息 我不允许使用 if while for 但在 C Lion 中一切正常 但在其他编译器中它说 hw2q1 c In function decision hw2q1 c 38 55 error valu
  • C 8位16位32位编译器之间的区别[关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • Log4j RollingFileAppender 未将映射器和减速器日志添加到文件中

    我们希望将应用程序日志打印到本地节点上的文件中 我们使用 Log4j 的 RollingFileAppender Our log4j properties文件如下 ODS LOG DIR var log appLogs ODS LOG IN
  • 如何在Android资源中使用unicode?

    我想用this http www fileformat info info unicode char 1f4e1 index htm我的资源文件中的 unicode 字符 但无论我做什么 我都会以 dalvikvm 崩溃结束 使用 Andr
  • 在 Java 中读取 CDATA XML

    我正在尝试解析 XML 中的 CDATA tpyes 代码运行良好 它将在控制台中打印 Links 大约 50 次 因为这就是我拥有的链接数量 但链接不会出现 它只是一个空白的控制台空间 我可能会错过什么 package Parse imp
  • 获取用户最后拍摄的照片

    嘿 我想获取用户通过任何相机应用程序拍摄的最后一张照片 我不知道该怎么做 谁能帮我 此外 我想将该图像作为电子邮件或彩信的附件发送 thanks Find the last picture String projection new Str
  • 在 sails.js 中,如何访问控制器外部的会话变量?

    在控制器中 这很容易 访问会话变量很简单 req session x 1 但是 我如何访问该外部控制器 喜欢服役吗 module exports test function No req session here 您可以创建一个将注册的主控