Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js shopify express sequelize定制策略_Node.js_Promise_Shopify - Fatal编程技术网

Node.js shopify express sequelize定制策略

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

我正在尝试使用节点模块shopify express: 使用自定义策略存储商店令牌,因为sqlstrategy由于错误的SQL语句(在github上已经有问题)而不能与postgres一起工作

在文档中,他们说我需要一个这样的类:

  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处理程序重新抛出错误。