我遇到了一个无法找到答案的问题,即使我觉得这种功能在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访问当前登录的用户,这个想法可能从一开始就注定失败反正。
无论如何,我想知道是否有一种处理这个问题的聪明方法。
答案 0 :(得分:2)
您可以在策略中设置参数。创建一个在bookController.find上运行的策略,并让它添加用户ID
示例(取决于您的设置)
req.options.where.user = req.session.userId
然后,当您的蓝图运行时,它将合并该用户ID与其他查询属性在params中传递。
这是一个初步的例子。您可以将此方法展开为自动附加用户以及创建和更新
<强>配置/ 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
}
答案 1 :(得分:0)
例如,如果要扩展“查找”:
find: function(req, res) {
console.log("I am extended functionality")
return sails.hooks.blueprints.middleware.find(req, res)
}