node.js - GraphQL 和从 Oracle DB 中提取数据:查询以结果集响应并且不进入 Graphql 解析器窗口
问题描述
我是 GraphQL 的新手。
开始开发 GraphQL 应用程序以从 oracle 数据库中提取数据。
这是一个非常简单的应用程序。查询以 响应,resultset
并且可以在console.log
;中看到结果 但是,它不会出现在graphql
窗口中(响应/解析器窗口)。它抛出错误
无法为非 User.email 返回 null
我在oracle连接中尝试了promise。不确定,为什么它没有在 GraphQL 中显示数据。
用户类型.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);
});
})
}
}
}
类型.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);
}
}
}
});
解决方案
这段代码很纠结,我建议从头开始。例如,您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
对于演示,我采用了我在本博客系列中描述的一个简单 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
推荐阅读
- javascript - 如何将此单个幻灯片脚本转换为多个幻灯片
- javascript - 有没有像 Promise.all() 这样的函数,但即使在一个失败之后也会运行所有的 Promise?
- flutter - 多次执行语句
- python - 生成所有可能的井字棋棋盘位置
- python - 寻找情节的时期
- angular - 如何在 Angular 中使用 EventEmitter 将 JSON 数据从 ChildComponent 传递到 AppComponent
- python - 错误:“pygame.Surface”对象不可调用
- c - macOS 上使用什么时钟返回 SO_TIMESTAMP 的值?
- css - 如何根据rails中的用户设置动态更改tailwind-config.js
- kubernetes - Nginx 入口控制器的自定义错误后端配置