Node.js shopify express sequelize定制策略
我正在尝试使用节点模块shopify express: 使用自定义策略存储商店令牌,因为sqlstrategy由于错误的SQL语句(在github上已经有问题)而不能与postgres一起工作 在文档中,他们说我需要一个这样的类:Node.js shopify express sequelize定制策略,node.js,promise,shopify,Node.js,Promise,Shopify,我正在尝试使用节点模块shopify express: 使用自定义策略存储商店令牌,因为sqlstrategy由于错误的SQL语句(在github上已经有问题)而不能与postgres一起工作 在文档中,他们说我需要一个这样的类: class Strategy { // shop refers to the shop's domain name getShop({ shop }): Promise<{accessToken: string}> // sho
class Strategy {
// shop refers to the shop's domain name
getShop({ shop }): Promise<{accessToken: string}>
// shop refers to the shop's domain name
storeShop({ shop, accessToken }): Promise<{accessToken: string}>
}
类策略{
//商店是指商店的域名
getShop({shop}):承诺
//商店是指商店的域名
商店({shop,accessToken}):承诺
}
我上了以下课程:
class Strategy {
// shop refers to the shop's domain name
// Promise<{accessToken: string}>
getShop(shopInfo) {
const { shop } = shopInfo;
console.log('get shop info', shopInfo)
console.log('check domain', shop)
return db.Shop.find({
where: {
shopify_domain: shop
}
})
.then(foundShop => {
return { accessToken: foundShop.access_token }
})
}
// shop refers to the shop's domain name
// Promise<{accessToken: string}>
storeShop(shopInfo) {
const { shop, accessToken } = shopInfo;
console.log('storing store', 'shop variable', shop, 'access token variable', accessToken);
return db.Shop.find({
where: {
shopify_domain: shop
}
})
.then(foundShop => {
if (foundShop) {
foundShop.access_token = accessToken
return foundShop.save()
.then(foundShop => {
return { accessToken: foundShop.access_token }
})
} else {
return db.Shop.create({ shopify_domain: shop, access_token: accessToken }).then(newShop => {
return { accessToken: newShop.access_token }
})
}
})
}
}
类策略{
//商店是指商店的域名
//允诺
getShop(shopInfo){
const{shop}=shopInfo;
console.log('get shop info',shop info)
console.log('检查域',商店)
返回db.Shop.find({
其中:{
shopify_域:商店
}
})
。然后(foundShop=>{
返回{accessToken:foundShop.access_token}
})
}
//商店是指商店的域名
//允诺
商店(shopInfo){
const{shop,accessToken}=shopInfo;
log('storing store','shop variable',shop',access token variable',accessToken);
返回db.Shop.find({
其中:{
shopify_域:商店
}
})
。然后(foundShop=>{
if(铸造车间){
foundShop.access\u token=accessToken
return foundShop.save()
。然后(foundShop=>{
返回{accessToken:foundShop.access_token}
})
}否则{
返回db.Shop.create({shopify_domain:Shop,access_token:accessToken})。然后(newShop=>{
返回{accessToken:newShop.access_token}
})
}
})
}
}
正在发生的是,它正在正确插入,但冻结。我相信这是因为我没有兑现承诺?我仍然在为他们绞尽脑汁,所以不确定我是否做对了
如果有帮助:
这是storeShop方法上的shopInfo变量:
{
accessToken: 'f444ca7789e9bcfb0fb2dc6026a79ece',
shop: 'jldesigndevstore.myshopify.com'
}
(err, token) => {
if (err) {
console.error('So turns out the documentation was incorrect. Went into the node_module and saw the Memory strategy was different. This is the Class that worked using Sequelize:
class SequelizeStrategy {
async getShop({ shop }) {
let foundShop = await db.Shop.find({
where: {
shopify_domain: shop
}
})
.catch(err => {
console.log('get shop error', err)
})
return done(null, {accessToken: foundShop.access_token});
}
async storeShop({ shop, accessToken }, done) {
let storedShop = await db.Shop.find({
where: {
shopify_domain: shop
}
})
.then(foundShop => {
if (foundShop) {
foundShop.access_token = accessToken
foundShop.save()
return foundShop;
} else {
return db.Shop.create({ shopify_domain: shop, access_token: accessToken })
}
})
.catch(err => {
console.log('store shop error happened', err);
return done(err);
})
return done(null, accessToken);
}
}
{
accessToken:'F44CA7789E9BCFB0FB2DC6026A79ECE',
商店:“jldesigndevstore.myshopify.com”
}
(错误,标记)=>{
如果(错误){
console.error(“因此证明文档不正确。进入node_模块,发现内存策略不同。这是使用Sequelize工作的类:
您的类策略显然实现了指定的接口。这两种方法都返回一个承诺。通过(临时)将.catch()
链接到每个承诺链,例如db.Shop.find(…)。然后(…).catch(…)
您可以记录可能出现的任何错误。不要忘记从catch处理程序重新抛出错误。