Как мне написать распознаватель при использовании сервера apollo graphql с базой данных neo4j?
Я использую neo4j dB, и я установил apollo graphql server (используя graphql-server-express). Допустим, моя схема имеет 3 типа, а именно "Страна", "Штат" и "Люди", где в одной стране может быть несколько штатов, а в одном штате может быть несколько человек.
// Пример schema.js
import { makeExecutableSchema } from 'graphql-tools';
import resolvers from './resolvers';
const typeDefs = `
type Country {
id: Int!
name: String
state: [State]
people: [People]
}
type State {
id: Int!
name: String
countryID: CountryID
people: [People]
}
type People {
id: Int!
name: String
SSN: String
stateid:StateID
countryid:CountryID
}
type Query {
Countries: [Country]
States: [State]
Peoples: [People]
}
schema {
query: Query
}
`;
export default makeExecutableSchema({
typeDefs: typeDefs,
resolvers,
});
Итак, как мне написать свою функцию распознавателя в файле resolver.js, чтобы он помог мне правильно получить данные из любого из вышеперечисленных типов?
Я попытался использовать следующий запрос в файле resolver.js (для запроса к базе данных Neo4j с использованием языка запросов Cypher), но получил ошибку типа, и я не могу ее исправить.
// Пример файла resolver.js.
let neo4j = require('neo4j-driver').v1;
let driver = neo4j.driver("bolt://localhost", neo4j.auth.basic("neo4j",
"******"));
const resolver = {
Query: {
Countries(_, params) {
let session = driver.session();
let query = "MATCH (country:Country) RETURN country;"
return session.run(query, params)
.then( result => { return result.records.map(record => { return
record.get("country").properties })})
},
},
State:{
state(State) {
let session = driver.session(),
params = {countryid: Country.id},
query = `
MATCH (s:State-[:PRESENT]->(c:Country)
WHERE s.countryid = $countryid
RETURN s;
`
return session.run(query, params)
.then( result => { return result.records.map(record => { return
record.get("state").properties })})
},
},
};
export default resolver;