无法从返回的sequelize JSON对象获取特定的dataValue

时间:2018-03-29 09:08:13

标签: node.js sequelize.js

我有两个数据模型,一个是Passport,另一个是Recipe,现在我正在处理Recipe中的一个属性,叫做authorFbPage,我试图从Passport获取特定的dataValue, 代码是

authorFbPage: {
      type: DataTypes.VIRTUAL,
      async get() {
        try {
          const thisUser = await this.getDataValue('UserId');
          let fbId = 'https://www.facebook.com/LabFnP';
          const User = await models.Passport.findAll({ where: { UserId: thisUser } });
          const Passport = await JSON.stringify(User);
          const PassportValue = await JSON.parse(Passport);
          console.log(PassportValue.provider);
          //The problem happened in here!
          return fbId;
        } catch (e) {
          console.log(e);
        }
      },
    }, 

一开始,用户将是一个巨大的续集返回,所以我试图使它成为一个JSON对象,然后我使用JSON.parse将其转移到下面的对象

{ id: 2,
[0]   protocol: 'oauth2',
[0]   accessToken: null,
[0]   provider: 'google',
[0]   authority: null,
[0]   identifier: '109412096578527604841',
[0]   tokens: 'token',
[0]   salt: null,
[0]   createdAt: '2018-03-08T09:46:13.000Z',
[0]   updatedAt: '2018-03-08T09:46:13.000Z',
[0]   UserId: 61 }

当我尝试从这个对象中控制提供程序时,它返回“undefined”,它真的让我很困惑,因为我已经将它转移到一个对象,为什么它仍然不会得到这个值?

1 个答案:

答案 0 :(得分:1)

而不是使用这些代码:(请同时阅读评论)

const User = await models.Passport.findAll({ where: { UserId: thisUser } });
const Passport = await JSON.stringify(User); // remove await this is not async process
const PassportValue = await JSON.parse(Passport); // remove await this is not async process

解决方案:

首先根据代码将findAll更改为findOne我认为您只需要User对象而不是对象数组。

只需使用raw : true,它只返回带有值的json对象,没有其他额外的东西:

const User = await models.Passport.findOne({ raw : true , where: { UserId: thisUser } });

或使用.toJSON()

const User = await models.Passport.findOne({ where: { UserId: thisUser } });
const PassportValue = User.toJSON();