meteor-shopify :期望字符串是哈希
meteor-shopify : expected String to be a Hash
我正在使用 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]
。
有什么想法吗?
我认为可能包中存在错误。 API 到 POST 之前成功使用过吗?我不确定这个问题是否在所有 POST 请求的范围内,或者只是一些(使用很棒的 froatsnook 包)。
我做了一个 issue 我也遇到了一个 POST 返回 "string expects to be a hash" 的请求。
我通过使用普通的旧 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);
有关详细信息,请参阅对@ilrein 问题的评论。
似乎是包本身的问题。
这是一个简单的客户端API(用于具有基本身份验证的私有应用程序)我用来规避这个问题:Github gist
我正在使用 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]
。
有什么想法吗?
我认为可能包中存在错误。 API 到 POST 之前成功使用过吗?我不确定这个问题是否在所有 POST 请求的范围内,或者只是一些(使用很棒的 froatsnook 包)。
我做了一个 issue 我也遇到了一个 POST 返回 "string expects to be a hash" 的请求。
我通过使用普通的旧 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);
有关详细信息,请参阅对@ilrein 问题的评论。
似乎是包本身的问题。
这是一个简单的客户端API(用于具有基本身份验证的私有应用程序)我用来规避这个问题:Github gist