Keystone-next 自定义突变

问题描述

谁能建议为什么我的突变不起作用。我的应用是 keystone-next 后端、apollo-boost 和 next.js。我有处于状态的字段并将它们设置为变量,但它们不会发送到后端。我确定这以前有效。

keystone 中的后端自定义变更

async function locate(
  root: any,{ userId }: { userId: string },context: KeystoneContext
  ): Promise<LocationCreateInput> {
  // 1. Query the current user see if they are signed in
  const sesh = context.session as Session;
  if (!sesh.itemId) {
    throw new Error('You must be logged in to do this!');
  }
  // 2. Create the location object
  return await context.lists.Location.createOne({
    data: {
      user: { connect: { id: sesh.itemId }},}
  })
}
  export default locate;

和 next.js 中的前端

const LOCATE_MUTATION = gql`
  mutation LOCATE_MUTATION(
        $address: String
        $lat: String
        $lng: String
        ) {
        locate(data:{ address: $address,lat: $lat,lng: $lng }) {
            id
            address
            lat
            lng
            user {
                id
                name
            }
        }
        }
`;
const [locate,{ error }] = 
    useMutation(LOCATE_MUTATION,{
      variables: {address: location,lat: slat,lng: slng}
    })
<button onClick={locate}>Set my Location</button>

最后,我在 apollo 开发工具中显示的突变

Variables
address "Cambridge CB1,UK"
lat "52.1964114"
lng "0.1746102"
▾Mutation string
mutation LOCATE_MUTATION($address: String,$lat: String,$lng: String) {
  locate(data: {address: $address,lng: $lng}) {
    id
    address
    lat
    lng
    user {
      id
      name
      __typename
    }
    __typename
  }
}

解决方法

出于故障排除目的,自行测试突变会很有帮助,例如通过 GraphQL 游乐场。这可以缩小问题的范围(问题是来自突变还是前端?)。

您的变更与前端之间存在脱节:您的变更接受一个 userId 参数(也从未使用过),但在前端您传递了三个变量:address、{{ 1}} 和 lat

如果您修改的目的是创建一个 lng 条目(而不是简单地将现有的 Location 与一个 Location 相关联),您需要将三个变量添加到User 对象:

data

如果您不在突变中使用 data: { address: address,lat: lat,lng: lng,user: { connect: { id: sesh.itemId }},} ,则可以将其完全删除。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...