更新:我有这个私有API请求来获取客户元数据数据,该数据向shopify管理员发送请求。
const {getAccessToken} = require('./auth')
const request = require('request')
const {shopFromPermanentDomain} = require('./helpers')
const getCustomerMetafields = ({accessToken, id, shop}) => new Promise((resolve, reject) => {
request({
url:`https://${shop}.myshopify.com/admin/customers/${id}/metafields.json',
headers: {
'X-Shopify-Access-Token': accessToken
}
}, (error, response, body) => {
const {errors} = JSON.parse(body)
if (response.statusCode === 200) {
const { metafields } = JSON.parse(body)
resolve(metafields)
}
reject({error: errors, status: 500})
})
})
const getCustomerMetafieldsResponse = (req, res) => {
const {id, permanentDomain} = req.body
if (id && permanentDomain) {
const shop = shopFromPermanentDomain(permanentDomain)
getAccessToken({shop})
.then(accessToken => getCustomerMetafields({accessToken, id, shop})
.then(meta => res.json({
meta,
status: 200
}))
)
.catch(({error, status}) => res.json({error, status}))
} else {
res.json({error: 'Missing params', status: 500})
}
}
module.exports = getCustomerMetafieldsResponse
我通过以下请求从前端向我的API发出此请求。
const getCustomerMeta = ({
id,
permanentDomain
}) => new Promise((resolve, reject) => {
post({
params: { email, permanentDomain, task: 'get-customer-meta' },
then: ({ error, id, state, status }) => {
if (status === 200) {
resolve({ id, state })
}
reject(error)
},
url: '/apps/spoke'
})
})
getCustomerMeta({
id, // 98303739294 (Customer ID)
permanentDomain // "store.myshopify.com"
})
发出此请求时,我收到以下请求错误:
500 (Internal Server Error)
VM706781:8 Uncaught SyntaxError: Unexpected token < in JSON at position 7
at JSON.parse (<anonymous>)
at XMLHttpRequest.l.onload
然后,我想获取客户元数据数据,以便我可以使用收集的数据填充前端。
谢谢!
您无法在不使用应用程序代理的情况下从前端调用后端(即)/ admin。在前端,您编写的代码将使用客户ID对您的应用程序进行代理XHR调用。使用该ID,您将获得Customer资源的Metafields,而不是您的示例中的Shop。通过为客户提供Metafields资源,您可以查找您感兴趣的资源,并在前端绘制它们。
或者只使用Liquid渲染登录客户的元数据,因为这样更简单。