在 angular 中进行突变调用(获取“http://localhost:8080/graphql 的 Http 失败响应:400 错误请求”)

Make a mutation call in angular (getting "Http failure response for http://localhost:8080/graphql: 400 Bad Request")

提问人:Gagan 提问时间:10/9/2023 最后编辑:Gagan 更新时间:10/12/2023 访问量:57

问:

我是 GraphQL 和 angular 的新手,我试图遵循文档但无法进行突变。 以下是ts文件代码


export const USER_SIGNUP = gql`
  mutation AddUser($userInput: UserInput) {
    addUser(userInput: $userInput) {
      id
      name
      email
      password
    }
  }
`;

import { Component } from '@angular/core';
import { Apollo } from 'apollo-angular';
import { USER_SIGNUP } from 'src/app/graphql/user';

@Component({
  selector: 'app-sign-up',
  templateUrl: './sign-up.component.html',
  styleUrls: ['./sign-up.component.scss'],
})
export class SignUpComponent {

  constructor(private apollo: Apollo) {}

  userSignUp() {
    this.apollo
      .mutate({
        mutation: USER_SIGNUP,
        variables: {
          userInput: {
            name: 'YRT',
            email: 'RTRT',
            password: '1542',
          },
        },
      })
      .subscribe(
        (data) => {
          console.log(data);
        },
        (err) => {
          console.log(err.message);
        }
      );
  }
}

下面是html文件代码

<div class="sign-up-main-container">
  <div>
    <app-auth-bg-component></app-auth-bg-component>
  </div>
  <form (ngSubmit)="userSignUp()" class="sign-up-form">
    <div>
      <label>Name</label>
      <div class="sign-up-input-cont">
        <input type="text" placeholder="Enter your name." />
      </div>
    </div>
    <div>
      <label>Email</label>
      <div class="sign-up-input-cont">
        <input type="text" placeholder="Enter your email." />
      </div>
    </div>
    <div>
      <label>Password</label>
      <div class="sign-up-input-cont">
        <input [type]="passwordType" placeholder="Enter your password." />
      </div>
    </div>
    </div>
    <button type="submit">Signup</button>
  </form>
</div>

以下是我用于用户解析器的 nestjs 代码,我在其中定义了突变

import { Resolver, Query, Mutation, Args } from '@nestjs/graphql';
import { UserService } from './user.service';
import { User, UserInput } from './users.model';

@Resolver()
export class UserResolver {
  constructor(public userService: UserService) {}

  @Query(() => String)
  hello() {
    return 'hello';
  }

  @Mutation(() => User)
  addUser(@Args('userInput') userInput: UserInput) {
    return this.userService.addUser(userInput);
  }
}

我已经按照文档进行了操作,但不知道为什么我收到此错误(“http://localhost:8080/graphql 的 Http 失败响应:400 错误请求”),请帮助我解决这个问题。

下面是 userInput 的输入类型

@InputType()
export class UserInput {
  @Field({ nullable: true })
  id: string;

  @Field()
  name: string;

  @Field()
  password: string;

  @Field()
  email: string;
}
angular graphql apollo-server 突变

评论

0赞 Gagan 10/9/2023
如果有人需要更多细节,请随时询问我可以提供
0赞 Michel Floyd 10/10/2023
请包括服务器架构中输入类型的定义以及突变。400 通常是无效的 GraphQL 查询或突变。我有点怀疑,除非电子邮件被定义为只是一个.UserInputaddUseremail: 'RTRT'String
0赞 Gagan 10/11/2023
@MichelFloyd 下面是 userInput 的输入类型。我也更新了我的问题谢谢。''' @InputType() export class UserInput { @Field({ nullable: true }) id: string; @Field() name: string; @Field() password: string; @Field() email: string; } '''
0赞 Michel Floyd 10/12/2023
您能否在架构中包含突变的定义?addUser
0赞 Gagan 10/12/2023
@MichelFloyd谢谢你的帮助,但我发现了错误。不知道这里“!”的重要性是什么,但添加了它并且它起作用了,如果您知道为什么我们必须使用它,请告诉我。谢谢。

答:

0赞 Gagan 10/12/2023 #1

在定义突变时,我不得不使用如下所示的“!”标记。

export const USER_SIGNUP = gql`
  mutation AddUser($userInput: UserInput!) {
    addUser(userInput: $userInput) {
      id
      name
      email
      password
    }
  }
`;

不知道这里的“!”有什么重要性,但补充说它并且它起作用了,如果你们中的任何人知道为什么我们必须使用它,请告诉我。谢谢。

评论

0赞 Michel Floyd 10/13/2023
这告诉我的是,你的突变是用它定义的,这意味着不可为空 - 它必须被提供。AddUserUserInput!
0赞 Gagan 10/13/2023
好的,明白了👍.