【发布时间】:2020-09-23 04:58:05
【问题描述】:
我无法在我的应用程序中添加对象,这是基于一些教程的(但是我可以使用 graphql 游乐场来完成)。 这是我的架构并在 AddLaunch 组件中使用突变。
const ADD_LAUNCH = gql`
mutation($flight_number: Int!,
$mission_name: String!,
$launch_year: String!,
$launch_success: Boolean!,
$rocket: addRocket!) {
addLaunch(flight_number: $flight_number,
mission_name: $mission_name,
launch_year: $launch_year,
launch_success: $launch_success,
rocket:{
rocket_id: $rocket_id,
rocket_name: $rocket_name,
rocket_type: $rocket_type
}
) {
flight_number
mission_name
launch_year
launch_success
rocket{
rocket_id
rocket_name
rocket_type
}
}
}
`;
...
const [newLaunch, setNewLaunch] = useState({
flight_number:'',
mission_name: '',
launch_year: '',
launch_success: null,
rocket_id:'',
rocket_name:'',
rocket_type:''
});
const [addLaunch] = useMutation(ADD_LAUNCH);
...
const onSubmit = async e => {
e.preventDefault();
await addLaunch({ variables: {
flight_number: newLaunch.flight_number,
mission_name: newLaunch.mission_name,
launch_year: newLaunch.launch_year,
launch_success: newLaunch.launch_success,
rocket:{
rocket_id: newLaunch.rocket_id,
rocket_name: newLaunch.rocket_name,
rocket_type: newLaunch.rocket_type
}
}
});
refetchLaunches()
}
我的 typeDefs:
const typeDefs = gql`
type Rocket {
rocket_id: String
rocket_name: String
rocket_type: String
},
type Launch {
_id: ID,
flight_number: Int,
mission_name: String,
launch_year: String,
launch_date_local: String,
launch_success: Boolean,
rocket: Rocket
},
type Query {
launches: [Launch]
launch(flight_number:Int!): Launch
}
input addRocket {
rocket_id: String!
rocket_name: String!
rocket_type: String!
}
type Mutation {
addLaunch(flight_number: Int!,
mission_name: String!,
launch_year: String!,
launch_success: Boolean!,
rocket: addRocket!
): Launch
`
解析器(一个突变):
addLaunch: (parent, launch) => {
// Create a new record in the database
const newLaunch = new Launch({
flight_number: launch.flight_number,
mission_name: launch.mission_name,
launch_year: launch.launch_year,
launch_success: launch.launch_success,
rocket: launch.rocket
});
// Save the record and return it
return newLaunch.save();
}
我尝试了很多方法,但我无法从错误(错误请求 400)中获取任何具体信息。
【问题讨论】:
-
将对象传递给
rocket变量(带有addRocket结构)...在解析器中在newLaunch 之前在db 中创建new Rocket对象(使用创建的火箭[id/relation]) -
我已经找到了这个问题的一半答案。原来我忘记了数字类型的输入总是返回字符串,也就是说,如果我写 42 它返回“42”(它只强制写数字字符),但我仍然没有解决我的问题,但也许一些在我之前的尝试中,我正确地写了它,但是这个 flight_number 参数在一开始就阻止了它。我稍后试试
标签: javascript reactjs graphql react-apollo graphql-mutation