meteor-shopify:期望字符串为哈希

elz*_*lzi 8 javascript shopify meteor

我正在使用froatsnook:shopify尝试修改自定义集合的metafields.

服务器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;

},
Run Code Online (Sandbox Code Playgroud)

客户端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 )
})
Run Code Online (Sandbox Code Playgroud)

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

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"}]}
Run Code Online (Sandbox Code Playgroud)

调用方法'modifyShopifyCustomCollectionMetafields'时出现异常错误:失败[400] {"errors":{"custom_collection":"期望字符串成为哈希"}}

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

有任何想法吗?

ilr*_*ein 5

我认为包中可能存在错误.你以前成功使用过API吗?我不确定问题是否在所有POST请求的范围内,或仅针对某些问题(使用awesome froatsnook包).

我也遇到了一个问题,面对一个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);
Run Code Online (Sandbox Code Playgroud)


elz*_*lzi 3

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

看来是包本身的问题。

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