我是GraphQL的新手。
开始开发GraphQL应用程序以从oracle数据库中提取数据。
这是一个非常简单的应用程序。查询以resultset
响应,并且可以在console.log
中看到结果;但是,它不会到达graphql
窗口(响应/解析器窗口)。引发错误
无法为非User.email返回null
我在oracle连接中尝试了promise。不知道为什么它不在GraphQL中显示数据。
UserType.js
module.exports = new GraphQLObjectType({
name: 'User',
fields: () => {
return{
id: { type: GraphQLID },
email: { type: new GraphQLNonNull(GraphQLString) }
}
}
});
DBConnection.js
module.exports = oraPool => {
return {
getUsers(apiKey){
return oracledb.createPool(oraConfig).then(function() {
console.log("Connection Pool created");
return oracledb.getConnection().then(function(conn) {
return conn.execute(
//`SELECT 'User ' || JSON_OBJECT ('id' VALUE id, 'email' VALUE email) FROM users where id = :id`
`SELECT * FROM users WHERE id = :id`
,[apiKey]).then(result => {
//console.log(result.metaData);
console.log(humps.camelizeKeys(result.rows[0]));
conn.close();
return humps.camelizeKeys(result.rows[0]);
})
.catch(function(err) {
console.log(err.message);
return connection.close();
});
})
.catch(function(err) {
console.error(err.message);
});
})
}
}
}
Type.js
const RootQueryType = new GraphQLObjectType({
name: 'RootQueryType',
fields: {
user: {
type: UserType,
args: {
key: { type: new GraphQLNonNull(GraphQLString) }
},
resolve: (obj, args, { oraPool }) => {
return oradb(oraPool).getUsers(args.key);
}
}
}
});
答案 0 :(得分:0)
这段代码很复杂,我建议从头开始。例如,您每次运行查询时都在调用createPool
。您应该在应用初始化期间创建池。
尽管您说这将是一个简单的应用程序,但它可能会不断发展。从头开始创建GraphQL服务器并非易事。我建议通过join-monster带来一些帮助。不幸的是,join-monster不再被积极开发。但是它非常稳定,比从头开始要好得多。这是一个很好的工作原理概述: https://github.com/stems/join-monster/tree/master/src
我最近在GraphQL上做了一个演讲,您可以在这里看到:https://www.slideshare.net/DanielMcGhan/intro-to-graphql-for-database-developers
对于该演示,我采用了this blog series中描述的简单API模式,并将其改编为通用EMP和DEPT演示表上的GraphQL服务器。您可以在此处访问代码: https://www.dropbox.com/s/cnvyrlik7irtbwm/graphql-api.zip?dl=0
另外,我的另一位同事在这里谈论GraphQL: https://blogs.oracle.com/opal/demo:-graphql-with-node-oracledb