【问题标题】:meteor-shopify : expected String to be a Hashmeteor-shopify : 期望 String 是一个 Hash
【发布时间】:2015-06-10 21:22:59
【问题描述】:

我正在使用froatsnook:shopify 尝试修改自定义集合的元字段。

服务器 JS

/**
 * Modify Shopify Custom Collection Metafields
 * @request PUT /admin/custom_collections/#{id}.json
 * 
 * @param  {Number}   collection_id 
 * @param  {Object}   collection_data
 * @param  {Function} callback
 */
modifyShopifyCustomCollectionMetafields: function(collection_id, collection_data, callback) {

  var meta = ShopifyAPI.modifyCustomCollection({
    id: collection_id,
    custom_collection : JSON.stringify( collection_data )
  })

  if ( AdminConfig.debug.server ) console.log( 'modifyShopifyCustomCollectionMetafields', meta )

  if ( callback ) callback( meta )

  return meta;

},

客户端 JS

Meteor.call('modifyShopifyCustomCollectionMetafields', collection_id, {
  'id': collection_id,
  'metafields' : [
  {
    'key' : 'color_primary',
    'value' : design_settings.colors.primary,
    'value_type' : 'string',
    'namespace' : 'store',
  },
  {
    'key' : 'color_dark',
    'value' : design_settings.colors.primary_dark,
    'value_type' : 'string',
    'namespace' : 'store',
  },
  {
    'key' : 'color_light',
    'value' : design_settings.colors.primary_light,
    'value_type' : 'string',
    'namespace' : 'store',
  },
  ]
}, function (data) {
  console.log( 'Clientside callback', data )
})

一切看起来都很好,但是我在(服务器)控制台中得到了这个:

PUT https://<MY_STORE_NAME>.myshopify.com/admin/custom_collections/42393729.json?custom_collection={"id":"42393729","metafields":[{"key":"color_primary","value":"#5c28a4","value_type":"string","namespace":"store"},{"key":"color_dark","value":"#401a74","value_type":"string","namespace":"store"},{"key":"color_light","value":"#a42da8","value_type":"string","namespace":"store"}]}

调用方法 'modifyShopifyCustomCollectionMetafields' 时出现异常错误:失败 [400] {"errors":{"custom_collection":"expected String to be a Hash"}}

请注意,如果我从服务器端 JS 中删除 JSON.stringify(...),它将尝试在请求 URI 中发送 [Object object]

有什么想法吗?

【问题讨论】:

    标签: javascript meteor shopify


    【解决方案1】:

    我认为可能包中存在错误。您之前是否成功使用过 API 进行 POST?我不确定问题是否在所有 POST 请求的范围内,或者仅适用于一些(使用很棒的 froatsnook 包)。

    我已经创建了一个issue,我也遇到了一个返回“字符串应该是一个哈希”的 POST 请求。

    我暂时回避了这个问题,使用普通的旧 HTTP.Post 并传入一个带有 Shopify API 特别要求的对象:

    var options = {
      data: params,
      headers: {
        'X-Shopify-Access-Token': Meteor.user().profile.shopifyAccessToken
      }
    };
    
    var newScript = HTTP.post("https://" + Meteor.user().profile.shopName + ".myshopify.com/admin/script_tags.json" , options);
    

    【讨论】:

    • 是的,我似乎无法联系包的作者。我不知道他为什么选择将所有数据发送为form-urlencoded 而不仅仅是 RAW 正文请求。这就是错误的来源。当 URL 参数相当简单时它工作得很好,但是当你有嵌套的对象和数组时它会变得混乱。 url 编码版本变为custom_collection['metafield'][0]['value']='some value',然后您正在处理 shopify 对编码 uri 的解析。我最终只是构建了自己的客户端 API 来与 shopify 对话。他的一个叉子在体内发送参数会很棒,但是哦,好吧
    • Heer 是 API 的要点,供任何需要它的人使用 gist.github.com/elzii/4c7061c843e02ac5bbdb
    【解决方案2】:

    有关详细信息,请参阅@ilrein 问题的评论。

    似乎是包本身的问题。

    这是一个简单的客户端 API(用于具有基本身份验证的私有应用程序)我为规避问题而制作的:Github gist

    【讨论】:

      猜你喜欢
      • 2015-03-01
      • 2010-11-30
      • 1970-01-01
      • 2018-10-18
      • 1970-01-01
      • 2021-05-11
      • 1970-01-01
      • 2021-11-26
      • 2022-12-05
      相关资源
      最近更新 更多