GraphQL期望Iterable,但在使用find

时间:2018-03-28 04:26:21

标签: node.js sequelize.js graphql apollo

目前我正在使用Apollo / GraphQL / Node.js / Sequelize来构建我的后端服务器,我的服务器代码如下所示,在那里我可以使用req.user来获取当前的登录用户

app.use(
  '/graphql',
  bodyParser.json(),
  graphqlExpress(req => ({
    schema,
    context: {
      models,
      user: req.user,
    },
  })),
);

现在我有两个模型User和Recipe,关联规则是Recipe属于User,所以在Recipe模式中我可以使用UserId知道哪个用户创建了这个模式,Recipe模式是

type Recipe {
  id: Int!
  authorName: String!
  authorFbPage: String @virtual
  perfumeName: String!
  message: String
  UserId: Int
}

type Query {
  allRecipe: [Recipe]
  meRecipe: [Recipe]
  AvailableWatchRecipe: [Recipe]
}

我的问题是在meRecipe部分,这个查询应该能够显示登录用户创建的食谱,解析器代码是

meRecipe: async (parent, args, { models, user }) => {
      if (user) {
        console.log(user.id);
        console.log(user.username);
        return models.Recipe.find({ where: { UserId: user.id } })
          .then((result) => { return result });
      }

      return null;
    }, 

你可以看到我也使用console.log来检查我是否可以获取当前用户信息,它实际上可以,所以我真的很困惑为什么当我在GraphQL服务器中运行这个查询时,它总是显示{{1 }}。 我检查了这些资源: https://github.com/brysgo/graphql-bookshelf/issues/10GraphQL Expected Iterable, but did not find one for field xxx.yyy 但是没有一个适合我的情况,任何人都可以给我一些建议,谢谢!

1 个答案:

答案 0 :(得分:1)

而不是使用:

models.Recipe.find

使用

models.Recipe.findAll // this will return single result in array