【问题标题】:Keystone JS with field as array of s3 objects具有字段作为 s3 对象数组的 Keystone JS
【发布时间】:2017-08-14 09:39:15
【问题描述】:

如何将类型定义为 Types.S3File 数组的字段。基本上我想要实现的是在 S3 中存储图像数组。我搜索了 Keystone 数据库文档,他们给出了如何将类型定义为 S3 文件。考虑一个现实生活场景,比如有一个用户,他有多个图像,或者有一个博客,它包含多个图像,我如何使用 keystone 来做到这一点?谢谢。任何帮助将不胜感激。

【问题讨论】:

    标签: amazon-s3 keystonejs


    【解决方案1】:

    不幸的是,这对于 S3File 类型是不可能的。

    虽然 Array 字段确实存在,但它们目前仅支持 Number 和 String 字面量。这些字段的主站点文档尚未更新,但看起来正在处理中。这是NumberArrayTextArray 的在制品文档。

    您还可以使用变通方法创建对象数组。如果您创建一个以数组作为其唯一字段的新模型,则可以在该数组内创建嵌套模式。不幸的是,如果您尝试在数组旁边指定任何其他字段,则会产生错误。我已经成功地使用这种技术为我正在开发的电子商务网站创建了支持购物车。购物车架构如下所示:

    var Cart = new keystone.List('Cart');
    
    Cart.schema.add( {
      items: [{
        itemID: String,
        quantity: Number
      }]
    });
    

    然后您可以在另一个模型(在我的例子中是 User 模型)中使用 Relationship Field 来引用 Cart 模型。

    这种方法的缺点是此购物车模型在管理 UI 中不可编辑。这对我来说不是问题,因为购物车是由中间件而不是用户更新的。如果您希望人们能够上传自己的图像,我不确定这是否适用于您的用例,但也许这是一个潜在解决方案的起点。

    我也不确定您是否注意到,但有一个支持多个图像的 CloudinaryImages 字段类型。当然,这需要您使用 Cloudinary,但他们确实有免费套餐。

    希望您找到适合您需求的解决方法,虽然这是一个令人沮丧的限制,但我发现 Keystone 是一个很棒的平台。

    【讨论】:

    • 感谢您的回复。是的,我有 Cloudinary Images,但客户还没有准备好为此付费,而且我们有一个亚马逊账户,所以想到了使用 S3FileType。无论如何,现在我们已经说服我们的客户使用 Cloudinary,我们将使用 CloudinaryImages。
    • 这将导致:必须使用类型函数指定字段,项目:[{ itemID:字符串,数量:数字}]
    猜你喜欢
    • 1970-01-01
    • 2020-01-14
    • 2020-12-20
    • 2023-02-23
    • 1970-01-01
    • 1970-01-01
    • 2016-07-06
    • 1970-01-01
    • 2019-03-20
    相关资源
    最近更新 更多