gpt4 book ai didi

javascript - 在sails.js 中更改默认蓝图操作的最佳实践

转载 作者:IT老高 更新时间:2023-10-28 23:27:10 31 4
gpt4 key购买 nike

我正在寻找自定义默认sails.js CRUD 蓝图的最佳实践的答案。我的意思的简单示例是假设我需要使用标准蓝图 POST\someModel 操作创建 SomeModel,并且我还想从 req 对象并将此属性设置为 req.body 以在 beforeCreate 函数中使用 values.user.id:

module.exports = {

attributes: {
// some attributes
},

beforeCreate: function (values, cb) {
// do something with values.user.id
}
};

我对sails.js 很陌生,不想使用反模式,所以我想请教一下什么是处理这种情况的正确方法。此外,如果有一些关于该主题的好资源也会很棒。

最佳答案

您已经确定了一些可供您选择的选项,并且像往常一样,这取决于您的用例。以下是对您在评论中列出的三个选项的一些想法:

  1. Override controller/create - 三者中,这是最好的选择,因为它不会阻塞 routespolicies 中的代码单个实例。
  2. 编写 controller/action 并添加到 config/routes.js - 虽然这样可行,但它违背了使用蓝图的目的,您必须完成所有代码在选项 1 中加上使您的 routes 代码更困惑。
  3. 为单个 create 操作应用策略 - 为此,您不仅需要弄乱 /policies 文件夹,还需要弄乱 policies。 js 文件。这是更多的代码,它把一个 Controller 方法的逻辑放在两个不同的地方,这两个地方都不是 Controller 。

在这三个中,选项 1 是最好的,因为它将代码包含在其上下文( Controller )中,并最大限度地减少了编写代码。这是假设您只想更改一个模型的 create 方法。


旁注:

作为您的用例如何确定您的实现的示例,以下是我设置 Sails 应用程序的方式,该应用程序有几个 REST 路由,每个路由根据调用路由的用户不同响应(使用有效的 Facebook token ):

  1. 仅使用蓝图操作路由(而非蓝图 REST 路由)
  2. 首先查看政策:'*': ['hasFBToken', 'isTokenForMyApp', 'extractFBUser', 'extractMyAppUser'] 存放fbuser, myappuserreq.body
  3. 中的变量
  4. 此时,我的 Controller 函数(例如 controller.action())被调用,并且可以访问有关该用户的信息并确定它是否具有执行 CRUD 的正确权限。

这个系统的优点:

  • 每个 CRUD 操作的所有代码都包含在其 Controller 函数中
  • routes.js(无代码)或 policies.js(一行)或 /policies
  • 适用于 API Versioning (例如 controllers/v1.0/controller.js),与版本化模型相比,版本化 Controller 更容易做到这一点。这意味着我可以创建一个新的 API 版本,并且只需在 /v2.0 中使用函数 action() 创建一个 Controller ,调用诸如 POST/v2.0/controller/action 将存在,不需要额外的路由。

希望此示例有助于说明如何做出设计决策以提供 API 版本控制等功能并在其特定上下文中整合代码。

关于javascript - 在sails.js 中更改默认蓝图操作的最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35540648/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com