【发布时间】:2020-08-17 13:32:50
【问题描述】:
我想使用 SailsJS 独立操作中的会话信息(来自我使用 req.session.<session variable name> 的控制器)
但是从一个独立的动作 (Actions2) 中,您不使用 (req, res) 定义函数,而是使用 (inputs, exits)。
【问题讨论】:
标签: sails.js
我想使用 SailsJS 独立操作中的会话信息(来自我使用 req.session.<session variable name> 的控制器)
但是从一个独立的动作 (Actions2) 中,您不使用 (req, res) 定义函数,而是使用 (inputs, exits)。
【问题讨论】:
标签: sails.js
NeoNexus DeMortis 是正确的,我只是遇到了这个,并认为我可以提供一个替代方案。 Sails 使用一个名为 machine-as-action 的模块,它允许您访问请求对象,而无需将 env 传递给函数。在不传入env 的情况下,您可以通过调用this.req 或this.res 来访问req 和res 函数。
https://sailsjs.com/documentation/concepts/actions-and-controllers#actions2
另外,据我所知,将 res 与 actions2 一起使用的唯一原因是设置自定义响应标头(this.res.set('Name-Of-Header', 'whatever value you want for header'))- - 或诸如 this.res.type('image/png') 之类的便捷方法之一,它告诉用户代理(例如浏览器)如何处理下载。 无论设置“内容处置”的方法是什么(这只是意味着您是否要指示浏览器尝试在浏览器中打开它(它可能会或可能不会这样做,具体取决于其功能)或总是鼓励它跳过甚至尝试打开它,总是只是做“文件另存为”,即使它可以自己打开,比如 PDF)
【讨论】:
res,因为这违背了exits 的目的。一般来说,最好使用自定义响应来更改内容类型,以便它们可以被其他操作重用。
你好@Arturo 欢迎来到 SO!
这是一个令人困惑的问题,因为我现在不记得我是如何解决这个问题的,因为我似乎找不到这方面的文档(我相信我通过源代码找到了它)。但是,Actions2 函数中有一个“逃生舱口”,您可以添加第三个参数env。所以,你的函数签名有inputs, exits, env; env 里面是req 和res。
这里是使用req 传递session 数据的示例:https://github.com/neonexus/sails-react-bootstrap-webpack/blob/release/api/controllers/admin/get-me.js
我正在使用isLoggedIn 策略来填充req 中的session,因为我更多地手动处理事情,所以我可以使用 Sails 的内置模型;在这里看到:https://github.com/neonexus/sails-react-bootstrap-webpack/blob/release/api/policies/isLoggedIn.js
【讨论】: