【问题标题】:Can I use an array as metadata value?我可以使用数组作为元数据值吗?
【发布时间】:2022-02-11 03:32:02
【问题描述】:

我正在尝试使用以下格式的元数据在 Stripe(使用 Next.js + Node)中创建产品:

metadata: {categories: ['foo', 'bar']}

但我似乎无法解决元数据中的纯字符串值。

在元数据值中使用方括号在条带仪表板中创建产品,在检索时会导致:

categories: "['foo', 'bar']"

尝试使用 Node 创建:

const new_product = await stripe.products.create({
      name: 'new product',
      metadata: {categories: ['foo', 'bar']}
})

导致:

Error: Invalid value type: {:"0"=>"foo", :"1"=>"bar"} must be a string

这确认该值必须是一个字符串。 The docs 有点不清楚具体的类型津贴:

您最多可以指定 50 个键,键名最长为 40 个字符,值最长为 500 个字符。

但我想我在元数据中遇到了字符串值。

最好的解决方法是什么?

我知道我可以遍历一个对象,只要它的键是索引,但我也需要更多元数据键和值。使用split 进行字符串分隔听起来很痛苦。我确信有更多方法可以有效地使用 JS 对象,但我试图尽可能简单,因为非开发人员也希望制作遵循这种原型的产品。

感谢您的帮助。

【问题讨论】:

    标签: javascript node.js stripe-payments


    【解决方案1】:

    Stripe 将此数据存储为单个字符串,而 AFAIK 无法解决此问题。

    但是,当使用像 Node.js 这样的 Stripe 库时,它会将字符串转换为您可以遍历的对象。我创建了一个与您共享的代码具有相同类别的产品,并且能够使用点符号访问 .categories 属性。

    const getProduct = async (id) => {
      console.log("Fetching product to evaluate metadata");
      const product = await stripe.products.retrieve(id)
      const meta = product.metadata
      // console.log(meta);
      console.log(meta.categories); 
    }
    
    node test.js
    Fetching product to evaluate metadata
    ["foo", "bar"]
    

    【讨论】:

      猜你喜欢
      • 2012-03-11
      • 1970-01-01
      • 2023-03-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-03
      • 1970-01-01
      • 2013-09-20
      相关资源
      最近更新 更多