如何摆脱变异结果的多余包装对象?

时间:2019-03-24 22:33:53

标签: graphql graphql-js

当我通过这样的突变向后端请求时:

const navSlide = () => {
    const burger = document.querySelector('.burger');
    const nav = document.querySelector('.nav-links');
    const navLinks = document.querySelectorAll('nav-links li');
    //Toggle nav
    burger.addEventListener('click', () => {
        nav.classList.toggle('nav-active');
        //Animate Links
        navLinks.forEach((link, index) => {
            if(link.getElementsByClassName.animation) {
                link.getElementsByClassName.animation = '';
            } else {
                link.style.animation = `navLinkFade 0.5s ease forwards ${index / 7 + 0.3}s`;
            }
        });
        //Burger Animation
        burger.classList.toggle('toggle');
    });
}


navSlide();

我收到这样的格式的回复:

mutation{
  resetPasswordByToken(token:"my-token"){
    id
  }
}

对我来说,那个名称与该变异相同的包装对象似乎有些尴尬(至少是多余的)。有没有办法摆脱这种包装,使返回的结果更干净?

这就是我现在定义突变的方式:

{
  "data": {
    "resetPasswordByToken": {
      "id": 3
    }
  }
}

1 个答案:

答案 0 :(得分:0)

总而言之:

resetPasswordByToken不是“包装对象”,而只是您在架构中定义的可解析为对象的字段(在本例中为UserType)。虽然通常一次只请求您mutation类型的一个字段,但是可以请求任意数量的字段:

mutation {
  resetPasswordByToken(token:"my-token"){
    id
  }
  someOtherMutation {
    # some fields here
  }
  andYetAnotherMutation {
    # some other fields here
  }
}

如果我们要像您建议的那样平缓响应的结构,我们将无法区分一个突变返回的数据与另一个突变返回的数据。同样,我们需要将所有这些内容嵌套在data内,以使我们的实际数据与返回的错误(出现在单独的errors条目中)分开。