graphql突变&沙发床

时间:2018-07-28 17:19:10

标签: graphql couchbase graphql-mutation

我开始使用带有ouchbase的graphQL,并且在运行突变时遇到一个小问题,我要做的是保存2个对象:

key: email@email.it
{
    type: 'credential',
    user_id: 'xxxx-xxxx-xxxx-xxxx',
    password: 'jknelkjf'
}

key: xxxx-xxxx-xxxx-xxxx
{
    type: 'user',
    name: 'aaaa',
    surname: 'bbbb'
}

这是我的变异函数:

export default {
  createUser: {
    type: User,
    args: {
      email: { type: GraphQLString },
      password: { type: GraphQLString },
      name: { type: GraphQLString },
      surname: { type: GraphQLString }      
    },
    resolve(source, args, req) {

      const _id = uuid();
      return new Promise((resolve, reject) => {

        bcrypt.hash(args.password, 10)
        .then(hash => req.db.insert({}, args.email, {
          password: hash,
          user_id: _id,
          type: "credential"
        }))
        .then(cred => req.db.insert({}, cred.user_id, {
          name: args.name,
          surname: args.surname,
          type: "user"
        }))
        .then(user => {
          return resolve(user);
        })
        .catch(err => {
          return reject(err);
        });

      });
    }
  }
}

这是我的模式

export const UserCredential = new GraphQLObjectType({
  name: 'UserCredential',
  fields: () => ({
    user_id: { type: GraphQLString },
    type: { type: GraphQLString },
    id: { type: GraphQLString },
    password: { type: GraphQLString }
  })
});

export const User = new GraphQLObjectType({
  name: 'User',
  fields: () => ({
    name: { type: GraphQLString },
    surname: { type: GraphQLString },
    type: { type: GraphQLString },
    id: { type: GraphQLString },
    credential: {
      type: UserCredential,
      resolve: (root, args, req) => {
        const query = `SELECT META(credential).id,credential.* FROM {{bucket}} as credential WHERE credential.type="credential" AND credential.user_id=$1`;
        return new Promise((resolve, reject) => {
          req.db.runQuery(null, query, [root.id])
          .then((res) => {
            return resolve(res[0]);
          })
          .catch((err) => {
            return reject(err);
          })
        });
      }
    }
  })
});

问题是,当我运行突变时,结果是凭据字段为null的用户对象,但是如果我对突变的解析添加超时,则会使用户拥有凭据对象... insert函数是这样的:

db.insert(result => {
    return db.find(result.id)
})

您有什么建议吗?

0 个答案:

没有答案