我目前正在使用nodejs探索graphQL,我正在尝试构建一个简单的示例,如下所示:
var express = require('express');
var graphqlHTTP = require('express-graphql');
var { buildSchema } = require('graphql');
var schema = buildSchema(`
type Query {
getUser(jid: String ): [User],
albums:[Album],
}
type User{
name:String,
image:String,
albums:[Album]
}
type Album{
name:String,
image:String
}
`);
class Album {
constructor() { }
name() { return 'ablum name' }
image() { return 'image url' }
}
class User {
constructor(jid) {
this.jid = jid;
console.log(this.jid);
}
ablums() {
return [new Album, new Album];
};
name() {
console.log(this.jid);
return "name";
}
image() { return "url"; }
}
var root = {
getUser: function ({ jid }) {
return [new User(jid), new User(jid)];
},
};
var app = express();
app.use('/graphql', graphqlHTTP({
schema: schema,
rootValue: root,
graphiql: true,
}));
app.listen(4000);
console.log('Running a GraphQL API server at localhost:4000/graphql');
我期待一个带有两个用户阵列的JSON结果,每个用户阵列包含另外两个包含它的名称和图像的专辑数组。但是我在“专辑”字段中显示为null,该字段应显示包含名称和图像字段的两个专辑的数组。
{
"data": {
"getUser": [
{
"name": "name of abc is michael",
"image": "url",
"albums": null
},
{
"name": "name of abc is michael",
"image": "url",
"albums": null
}
]
}
}
请帮忙!我是graphQL的新手,我认为这是一项非常有用的技术!
答案 0 :(得分:0)
这是您的用户类的拼写错误,您的方法称为ablums但您的查询正在查找名为albums的方法/属性,该方法/属性不存在,因此返回null。
答案 1 :(得分:0)
这是一个使用Hasura的现有服务器使用Node的示例(顺便说一句)。以下代码仅用于从Hasura / Postgres模式(或任何GraphQL服务器)获取JSON响应。一旦将数据放入变量中,就可以使用express服务。我正在为此工作,但可能会有几个示例。我可以稍后分享。还要检查Hasura订阅,它使用了开箱即用的实时通信,因此数据库上的每个更改都发送给客户端。这是链接:https://github.com/hasura/nodejs-graphql-subscriptions-boilerplate
在此示例中,只需更改gql查询以匹配您的架构和查询即可。
希望这对您有帮助。
var { ApolloClient } = require('apollo-client');
var { InMemoryCache } = require('apollo-cache-inmemory');
var { HttpLink } = require('apollo-link-http');
var fetch = require('node-fetch');
const cache = new InMemoryCache();
const link = new HttpLink({
uri: 'http://localhost:8081/v1/graphql/', fetch: fetch
});
const client = new ApolloClient({
cache,
link
});
const gql = require('graphql-tag');
var query = gql`
query planeacion {
lineas (where: { linea : { _eq: "123" }}){
descripcion
linea
}
}
`
client
.query({
query: query
})
.then(result => console.log(JSON.stringify(result.data)));