2016-06-03 4 views
0

rethinkdb 쿼리를 사용하여 graphQL 필드를 확인하는 데 문제가 있습니다. 나는 자바 스크립트 범위와 관련이 있다고 생각하지만 거의 모든 조합을 시도했다. 이것은 내가 지금 가지고있는 것입니다.Rethinkdb 및 GraphQL?

var connection = null; 

r.connect({host: 'localhost', port: 28015 }, function(err, conn){ 
    if(err) throw err; 
    connection = conn; 
}); 

var queryType = new GraphQLObjectType({ 
    name: 'Query', 
    fields:() => ({ 
    node: nodeField, 
    viewer: { 
     type: GraphQLString, 
     resolve:() => (r.db("test") 
          .table("authors") 
          .get("f433f6f6-f843-4636-a1d3-eb34b89aec67") 
          .getField("name") 
    ), 
    }, 
    }), 
}); 
+0

'resolve' 함수는 비동기 연산의 경우 약속을 반환해야합니다. 해결 함수에서 async-await을 사용할 수도 있습니다. –

+0

이것에 대한 해결책? rethinkdb/graphql을 사용하여 유사한 경로로 향할 준비를하십시오. – Justin

+0

문제는 db 요청이 끝날 때'run (conn)'함수가 누락되었습니다. – Vincent

답변

0

저는 이것이 GraphQL에 문제가 있다고 생각하지 않습니다. RethinkDB 쿼리 끝에 .run()을 추가하려고 시도 했습니까? run()이 없으면 쿼리가 DB로 보내지지 않습니다.

+0

와우, 아니. Thanks – omgj

+0

@helfer 왜'run()'을 resolve 함수에 추가해야하는지에 대한 답변을 추가하는 것이 도움이 될 수 있습니다. –

+0

'run()'은 resolve 함수가 아니라 RethinkDB 질의 끝에 추가되어야합니다. 'run()'이 없으면 질의는 작성되었지만 DB로 보내지지 않습니다. – helfer

1

약속을 사용하여 해결할 때까지 동일한 문제를 다루고있었습니다. 나는이 도움이 될 수 있습니다 희망

const db = require('../db'); 

const { 
    GraphQLSchema, 
    GraphQLObjectType, 
    GraphQLInt, 
} = require('graphql'); 

const queryType = new GraphQLObjectType({ 
    name: 'RootQuery', 
    fields:{ 
    usersCount: { 
     type: GraphQLInt, 
     resolve:() => { 
     return db.getUsers().then((result) =>{ 
      return result.length 
     }); 
     } 
    } 
    } 
}); 

const mySchema = new GraphQLSchema({ 
    query: queryType 
}); 

module.exports = mySchema; 

db.js

var Promise = require("bluebird"); 

var r =require('rethinkdb'); 

const dbConfig = { 
    host: 'localhost', 
    port: 28015, 
    db: 'test' 
}; 

const connect =() => { 
    return new Promise((resolve, reject) => { 
    r.connect({ 
     host: dbConfig.host, 
     port: dbConfig.port 
    }).then((connection)=>{ 
     resolve(connection); 
    }).catch((e) =>{ 
     reject(e); 
    }); 
    }) 
}; 

const getUsers =() => { 
    return new Promise((resolve, reject) => { 
    connect().then((connection) => { 
     r.db('test').table('users').run(connection).then((cursor) => { 
     return cursor.toArray() 
     }).then((result) => { 
      resolve(result); 
     }).then(() => { 
      connection.close(); 
     }).catch((err) => { 
      connection.close(); 
      reject(err); 
     }); 
    }).catch((error) => { 
     console.log("Connection error: ", error); 
     reject(error); 
    }); 
    }); 
} 

exports.getUsers = getUsers; 

이 내 스키마입니다. https://github.com/luiscript/graphql-rethinkdb-x