如何在不覆盖整个蓝图的情况下扩展Sails.js中的蓝图function?

我有一个问题,我一直没能find答案,即使我觉得这种function在Web应用程序中非常普遍。 我对sails.js和一般的web开发相当陌生,所以如果我使用错误的术语或其他东西,请随时纠正我。

我试图改变sails.js蓝图的默认function,特别是对于初学者来说“查找”。 我有一个模型,我们称之为Book,它有一个属性'user',这当然涉及到一个用户。 我想过滤来自localhost:[port] / book的结果,以便它只显示拥有者是当前login用户的书籍,而不是显示数据库中的所有书籍。

到目前为止,我已经试过检查策略是否会成为答案,但是看起来他们似乎产生了非常好的二进制“是/否”结果,不能用于过滤。 然后我试着从BookController中重写默认的查找操作,但是我害怕我重写了一些有用的function,因为我没有完全理解蓝图的源代码。 然后,我检查了在Sails.JS中持久化之前添加缺less的请求参数的答案,并尝试添加所有者作为URL查询参数,但发现我无法从routes.js访问当前login的用户,这个想法是可能从一开始就注定了。

无论如何,我想知道是否有一个聪明的方式来处理这个问题。

您可以在策略中设置参数。 创build一个在bookController.find上运行的策略,并添加用户标识

示例 (取决于您的设置)

req.options.where.user = req.session.userId 

然后,当你的蓝图运行时,它将合并该用户标识与其他查询属性在params中传递。

这是一个开始的例子。 您可以扩展此方法以自动附加用户以及创build和更新

configuration/ policies.js

 module.exports.policies = {'book.find':'attachUser'} 

API /政策/ attachUser.js

 module.exports = function(req, res, next) { if(!req.options.where) req.options.where = {}; req.options.where.user = req.session.userId }