使用GraphQl进行Sequelize:如何使用变异更新字段

时间:2017-08-01 09:47:14

标签: node.js sequelize.js graphql

我使用了一堆koa2,sequelize和graphql。我不想使用graphql变异更改用户模型的状态字段并返回更改的对象。

目前我的突变看起来像这样:

mutation: new GraphQLObjectType({
    name: 'Mutation',
    fields: {
        setState: {
            type: userType,
            args: {
                input: {
                    type: userStateInputType
                }
            },
            resolve: resolver(db.user, {
                before: async (findOptions, {input}) => {
                    const {uuid, state} = input;

                    await db.user.update(
                        {state},
                        {where: {uuid}}
                    );

                    findOptions.where = {
                        uuid
                    };

                    return findOptions;
                }
            })
        }
    }
})

那是相应的查询:

mutation setstate{
  setState(input: {uuid: "..UUID..", state: "STATE"}) {
    uuid
    state
  }
}

它正在运作,但我很确定有更好的解决方案。

1 个答案:

答案 0 :(得分:2)

我会避免尝试使用graphql-sequelize的resolver助手来进行变异。查看该库的源代码,看起来它只是用于解析查询和类型。

我认为更清洁的做法就是做这样的事情:

resolve: async (obj, { input: { uuid, state } }) => {
  const user = await db.user.findById(uuid)
  user.set('state', state)
  return user.save()
}

我在此避免使用update(),因为它只会返回受影响的字段。如果你决定扩展变异返回的字段,这样你就可以返回整个用户对象并避免为某些字段返回null。