reactjs - Apollo 客户端到 TypegraphQL apollo 服务器查询失败 - 400 响应
问题描述
我正在从具有以下结构的 apollo 客户端运行查询:
export const LOGIN_USER = gql`
mutation loginUser($authenticationInput: AuthenticationInput){
loginUser(authenticationInput: $authenticationInput){
email
password
}
} `;
在服务器端,我有以下基于 TypeGraphQL 的解析器:
@Mutation(() => User)
async loginUser(@Arg('authenticationInput') authenticationInput : AuthenticationInput): Promise<User> {
logResolver.info("Login user query received.");
let result = await this.userService.findUser(authenticationInput)
.then(result => {
return result;
});
return result;
}
我从服务器收到 400 响应。我检查了网络控制台,响应中有一条消息,内容如下:
extensions: {code: "GRAPHQL_VALIDATION_FAILED", exception: {stacktrace: [,…]}}
locations: [{line: 1, column: 20}, {line: 2, column: 34}]
message: "Variable "$authenticationInput" of type "AuthenticationInput" used in position expecting type "AuthenticationInput!"."
我不确定如何解决这个错误匹配类型的问题。它声称期望“AuthenticationInput!”的方式也很奇怪。类型应该是那个但没有!。
这是显示我如何从组件调用查询的 React 代码:
export default function LoginForm() {
const [fields, setFields] = useState({});
const client = useApolloClient();
const [loginUser, { loading, error, data }] = useMutation(LOGIN_USER, {
onCompleted({ login }) {
console.log("Logged in baby");
localStorage.setItem('token', login);
client.writeData({data: { isLoggedIn: true}});
}
});
function updateField(idx : string, value : string){
setFields({...fields, [idx]: value});
}
function userLogin(){
loginUser({variables: fields});
}
return(<div>
{loading ? <p>loading!</p> : null}
{error ? <p>Error!</p> : null}
<InputText onChange={updateField} id="email" type="email" placeholder="email"></InputText>
<InputText onChange={updateField} id="password" type="password" placeholder="password"></InputText>
<SubmitFormButton
click={userLogin}
text="login"></SubmitFormButton>
</div>
);
};
解决方案
您共享的查询具有AuthenticationInput
(not AuthenticationInput!
) 意味着该值可以为空。
export const LOGIN_USER = gql`
mutation loginUser($authenticationInput: AuthenticationInput) {
loginUser(authenticationInput: $authenticationInput) {
email
password
}
}
`;
但是您看到的错误:"Variable "$authenticationInput" of type "AuthenticationInput" used in position expecting type "AuthenticationInput!"
表明 GraphQL 服务器正在期待AuthenticationInput!
(一个不可为空的值)。
您是否尝试过更新查询以匹配这些类型?
export const LOGIN_USER = gql`
mutation loginUser($authenticationInput: AuthenticationInput!) {
loginUser(authenticationInput: $authenticationInput) {
email
password
}
}
`;
推荐阅读
- c# - 2d 滚动背景效果
- javascript - Map 在 React 中的第一次迭代后停止迭代
- javascript - 从事件中心获取消息到变量
- c++ - Ncurses 和 gdb 屏幕在调试时重叠。所以我想把两个屏幕分开
- java - 使用 Java 文件写入器将文件写入共享驱动器 (NAS) 的权限问题
- ios - 而不是删除一个数组,我希望它将数组发送到另一个 UIViewController
- angular - 在navigateByUrl()时Angular动态路由名称不起作用,需要刷新页面
- laravel - Laravel JWT:无法实现 JWTSubject
- java - 动态 Json 形成
- android - 无法在 android 版本 5.1 上安装 React-native 应用程序