我有一个问题,我无法找到答案,即使我觉得这种功能在Web应用程序中很常见。我对sails.js和web开发都很新,所以如果我使用错误的术语或其他东西,请随时纠正我。
我正在尝试更改sails.js蓝图的默认功能,特别是“查找”初学者。我有一个模型,我们称之为Book,它有一个属性'user',当然这与用户有关。我想从localhost:[port] / book中过滤结果,以便它只显示其所有者是当前登录用户的书籍,而不是显示数据库中的所有书籍。
到目前为止,我已经尝试检查政策是否是答案,但似乎它们产生非常二进制的“是/否”结果,不能用于过滤。然后我尝试从BookController覆盖默认的find动作,哪种工作,但我担心我会覆盖一些有用的功能,因为我不完全理解蓝图的源代码。然后我检查了答案Adding missing request parameter before persistance in Sails.JS,并尝试添加所有者作为URL查询参数,但发现我无法从routes.js访问当前登录的用户,这个想法可能从一开始就注定失败。
无论如何,我想知道是否有一种处理这个问题的聪明方法。
您可以在策略中设置参数。创建一个在bookController.find上运行的策略,并让它添加用户ID
示例(取决于您的设置)
req.options.where.user = req.session.userId
然后,当您的蓝图运行时,它将合并该用户标识与其他查询属性在参数中传递。
这是一个开始的例子。您可以展开此方法以在创建和更新时自动附加用户
配置/ 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
}
如果你想扩展'find'例如:
find: function(req, res) {
console.log("I am extended functionality")
return sails.hooks.blueprints.middleware.find(req, res)
}