После этого урока , у меня есть модель мангуста: (я использую термин "Аккаунт" вместо "Todo", но это то же самое)
const Account = mongoose.model('Account', new mongoose.Schema({
id: mongoose.Schema.Types.ObjectId,
name: String
}));
и GraphQLObjectType:
const AccountType = new GraphQLObjectType({
name: 'account',
fields: function () {
return {
id: {
type: GraphQLID
},
name: {
type: GraphQLString
}
}
}
});
и мутация GraphQL для создания одного из них:
const mutationCreateType = new GraphQLObjectType({
name: 'Mutation',
fields: {
add: {
type: AccountType,
description: 'Create new account',
args: {
name: {
name: 'Account Name',
type: new GraphQLNonNull(GraphQLString)
}
},
resolve: (root, args) => {
const newAccount = new Account({
name: args.name
});
newAccount.id = newAccount._id;
return new Promise((resolve, reject) => {
newAccount.save(err => {
if (err) reject(err);
else resolve(newAccount);
});
});
}
}
}
})
После выполнения запроса:
mutation {
add(name: "Potato")
{
id,
name
}
}
в GraphiQL я получаю ответ:
{
"errors": [
{
"message": "ID cannot represent value: { _bsontype: \"ObjectID\", id: <Buffer 5b 94 eb ca e7 4f 2d 06 43 a6 92 20> }",
"locations": [
{
"line": 33,
"column": 5
}
],
"path": [
"add",
"id"
]
}
],
"data": {
"add": {
"id": null,
"name": "Potato"
}
}
}
Создание объекта прошло успешно, и я вижу его в MongoDB Compass:
но, похоже, проблема с чтением значения.
Насколько совместимы GraphQLID
и mongoose.Schema.Types.ObjectId
? Если они не совместимы, я неправильно понимаю учебник, в частности, его использование:
newAccount.id = newAccount._id;
? Я не могу сказать, генерируется ли ошибка с помощью GraphQL, или MongoDB, или Mongoose, или чего-то еще.
EDIT
Любая информация об ошибке
ID не может представлять значение: {_bsontype: \ "ObjectID \", id:}
было бы очень полезно. Я чувствую, что он говорит мне, что не может сериализовать объект BSON ... но затем он отображает его сериализацию. Даже знание того, какая технология (mongo? Mongoose? Graphql?) Генерирует ошибку, поможет. Мне не повезло с Google.
РЕДАКТИРОВАТЬ 2
Это было вызвано изменением недавно введенного пакета graphql, и PR ожидает слияния, которое разрешает его.