如何在 Sails 中扩展蓝图的功能.js而不覆盖整个蓝图



我有一个问题,我一直找不到答案,尽管我觉得这种功能在Web应用程序中很常见。我对帆.js和一般的Web开发相当陌生,所以如果我使用了错误的术语或其他东西,请随时纠正我。

我正在尝试更改帆.js蓝图的默认功能,特别是初学者的"查找"。我有一个模型,我们称之为Book,它有一个属性"用户",当然与用户有关。我想从 localhost:[port]/book 过滤结果,以便它只显示所有者是当前登录用户的书籍,而不是显示数据库中的所有书籍。

到目前为止,我已经尝试检查策略是否是答案,但似乎它们会产生非常二进制的"是/否"结果,不能用于过滤。然后我尝试覆盖 BookController 中的默认查找操作,这有点有效,但我担心我正在覆盖一些有用的功能,因为我不完全理解蓝图的源代码。然后我查看了答案 在 Sails.JS 中持久化之前添加缺少的请求参数,并尝试将所有者添加为 URL 查询参数,但发现我无法从路由访问当前登录的用户.js无论如何,这个想法可能从一开始就注定要失败。

无论如何,我想知道是否有处理此问题的明智方法。

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

示例(取决于您的设置)

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

然后,当您的蓝图运行时,它会将该 userid 与在参数中传递的其他查询属性合并。

这是一个入门示例。您可以扩展此方法以在创建和更新时自动附加用户

配置/策略.js

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

api/policies/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)
    }

相关内容

  • 没有找到相关文章

最新更新