GraphQL 是一种用于 API 的查询语言,它可以让客户端定义数据的结构,以及需要返回的数据。Mutation 是 GraphQL 中用于修改数据的关键字,它可以让客户端修改数据,而不需要直接调用后端 API。
在本文中,我们将探讨在 GraphQL 中使用 Mutation 进行数据修改的技巧和最佳实践。我们将介绍如何定义 Mutation,如何处理错误,以及如何处理异步操作。
定义 Mutation
在 GraphQL 中,Mutation 是用于修改数据的关键字。我们可以使用它来定义需要修改的数据,并返回修改后的结果。
下面是一个简单的 Mutation 示例:
-------- - -------------- ---- ----- ----- ----- - -- ---- - -
这个 Mutation 定义了一个 updateUser 操作,它接受一个 id 和一个 name 参数,并返回一个包含 id 和 name 字段的对象。
在后端实现时,我们需要定义一个 updateUser 函数来处理这个 Mutation。这个函数需要接受一个包含参数的对象,并返回一个包含修改后的数据的对象。
下面是一个使用 Node.js 和 GraphQL.js 实现 updateUser 函数的示例:
----- - -------- ----------- - - ------------------- ----- ------ - ------------- ---- ---- - --- --- ----- ------- - ---- -------- - -------------- ---- ----- --------- ---- - --- ----- ----- - - - --- ---- ----- ----- ---- -- - --- ---- ----- ----- ---- -- -- ----- --------- - - ----------- -- --- ---- -- -- - ----- ---- - ----------------- -- ------- --- ---- -- ------- - ----- --- ----------- ---- -- ----- --- -------- - --------- - ----- ------ ----- -- -- ----- ----- - - -------- - -------------- ---- ----- ----- ------- - -- ---- - - -- --------------- ------ ------------------------ -- - -------------------- ---
这个示例使用 buildSchema 函数定义了一个包含 updateUser Mutation 的 GraphQL schema。然后定义了一个 users 数组来存储用户数据,并实现了 updateUser 函数来修改用户数据。
最后,我们使用 graphql 函数来执行 updateUser Mutation 并打印结果。
处理错误
在实际开发中,我们需要处理各种错误,例如用户输入无效数据、数据库操作失败等。在 GraphQL 中,我们可以使用 Error 类型来表示错误,并在 Mutation 中返回它们。
下面是一个处理错误的示例:
-------- - -------------- ---- ----- --- - -- ---- - -
这个 Mutation 尝试将 id 为 123 的用户的名称更新为空字符串。由于这是一个无效的操作,我们需要返回一个错误。
下面是一个使用 Node.js 和 GraphQL.js 处理错误的示例:
----- - -------- ------------ ------------ - - ------------------- ----- ------ - ------------- ---- ---- - --- --- ----- ------- - ---- -------- - -------------- ---- ----- --------- ---- - --- ----- ----- - - - --- ---- ----- ----- ---- -- - --- ---- ----- ----- ---- -- -- ----- --------- - - ----------- -- --- ---- -- -- - ----- ---- - ----------------- -- ------- --- ---- -- ------- - ----- --- ------------------ ---- -- ----- --- -------- - -- ------- - ----- --- --------------------- ----- ---------- - --------- - ----- ------ ----- -- -- ----- ----- - - -------- - -------------- ------ ----- --- - -- ---- - - -- --------------- ------ ------------------------ -- - -------------------- ---
这个示例使用 GraphQLError 类型来表示错误,并在 updateUser 函数中检查参数是否有效。如果参数无效,我们将抛出一个 GraphQLError。
处理异步操作
在实际开发中,我们通常需要进行异步操作,例如调用后端 API 或操作数据库。在 GraphQL 中,我们可以使用 Promise 来处理异步操作。
下面是一个处理异步操作的示例:
-------- - -------------- ---- ----- ----- ------- - -- ---- - -
这个 Mutation 尝试将 id 为 123 的用户的名称更新为 "John Smith"。由于这是一个异步操作,我们需要返回一个 Promise。
下面是一个使用 Node.js 和 GraphQL.js 处理异步操作的示例:
----- - -------- ----------- - - ------------------- ----- ------ - ------------- ---- ---- - --- --- ----- ------- - ---- -------- - -------------- ---- ----- --------- ---- - --- ----- ----- - - - --- ---- ----- ----- ---- -- - --- ---- ----- ----- ---- -- -- ----- --------- - - ----------- -- --- ---- -- -- - ------ --- ----------------- ------- -- - ------------- -- - ----- ---- - ----------------- -- ------- --- ---- -- ------- - ---------- ----------- ---- -- ----- --- --------- - ---- - --------- - ----- -------------- - -- ------ --- -- -- ----- ----- - - -------- - -------------- ---- ----- ----- ------- - -- ---- - - -- --------------- ------ ------------------------ -- - -------------------- ---
这个示例使用 Promise 来处理 updateUser 函数的异步操作。我们使用 setTimeout 模拟一个异步操作,然后在 resolve 或 reject 中返回结果。
结论
在 GraphQL 中使用 Mutation 进行数据修改可能比直接调用后端 API 更加方便和灵活。在本文中,我们介绍了如何定义 Mutation,如何处理错误,以及如何处理异步操作。这些技巧和最佳实践可以帮助我们更加高效地使用 Mutation。
来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/67279ad12e7021665e1d9db4