Node.js GraphQL&;从OracleDB中提取数据:查询用Resultset响应,而不';不要来到Graphql解析器窗口
我是GraphQL新手 开始开发GraphQL应用程序,从oracle数据库中提取数据 这是一个非常简单的应用程序。查询以Node.js GraphQL&;从OracleDB中提取数据:查询用Resultset响应,而不';不要来到Graphql解析器窗口,node.js,graphql,graphql-js,express-graphql,node-oracledb,Node.js,Graphql,Graphql Js,Express Graphql,Node Oracledb,我是GraphQL新手 开始开发GraphQL应用程序,从oracle数据库中提取数据 这是一个非常简单的应用程序。查询以resultset响应,可以在console.log中看到查询结果;但是,它不会出现在graphql窗口(响应/解析器窗口)中。它抛出了错误 对于非User.email,无法返回null 我在oracle连接中尝试了这个承诺。不确定,为什么它没有在GraphQL中显示数据 UserType.js module.exports = new GraphQLObjectType({
resultset
响应,可以在console.log
中看到查询结果;但是,它不会出现在graphql
窗口(响应/解析器窗口)中。它抛出了错误
对于非User.email,无法返回null
我在oracle连接中尝试了这个承诺。不确定,为什么它没有在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);
}
}
}
});
这段代码相当复杂,我建议从头开始。例如,每次运行查询时都要调用
createPool
。您应该在应用程序初始化期间创建池
虽然你说这将是一个简单的应用程序,但它总是可以增长的。从头开始创建GraphQL服务器并非易事。我建议通过加入怪物带来一些帮助。不幸的是,加入怪物不再是积极发展。但它相当稳定,比从头开始要好得多。下面是对其工作原理的一个很好的概述:
我最近做了一个关于GraphQL的演讲,您可以在这里看到:
对于演示,我采用了我在中描述的一个简单API模式,并将其调整为通用EMP和DEPT演示表上的GraphQL服务器。您可以在此处访问代码:
另外,我的另一位同事在这里谈到GraphQL:
这段代码非常复杂,我建议从头开始。例如,每次运行查询时都要调用
createPool
。您应该在应用程序初始化期间创建池
虽然你说这将是一个简单的应用程序,但它总是可以增长的。从头开始创建GraphQL服务器并非易事。我建议通过加入怪物带来一些帮助。不幸的是,加入怪物不再是积极发展。但它相当稳定,比从头开始要好得多。下面是对其工作原理的一个很好的概述:
我最近做了一个关于GraphQL的演讲,您可以在这里看到:
对于演示,我采用了我在中描述的一个简单API模式,并将其调整为通用EMP和DEPT演示表上的GraphQL服务器。您可以在此处访问代码:
另外,我的另一位同事在这里谈到GraphQL:
请避免删除和重新发布问题。这是普遍考虑的。如果你无意中删除了一个问题,你总是可以取消删除它。@Daniel Rearden,我的错。我想就我的问题提供更详细的信息(stackoverflow的新手)。还想添加更多信息-my console.log输出类似于[1,'ora@11.com“]您可以通过编辑问题来添加信息。请不要删除和重新发布。请避免删除和重新发布问题。这是普遍考虑的。如果你无意中删除了一个问题,你总是可以取消删除它。@Daniel Rearden,我的错。我想就我的问题提供更详细的信息(stackoverflow的新手)。还想添加更多信息-my console.log输出类似于[1,'ora@11.com“]您可以通过编辑问题来添加信息。请不要删除和转发。也请看谢谢你非常丹。我是你在Oracle的Nodejs博客的忠实读者。你在这里的介绍帮助我澄清了我这边的很多事情,现在我再也看不到那个错误了。但有一个问题是,对于突变,我们有没有像join monster这样的插件,我不这么认为。不过,对于突变,编写自己的解析器可能不是太糟糕。实际上,查询很困难,因为它们可以嵌套并引用多个类型(外键),这会导致复杂的动态SQL。谢谢@DanMcGhan。这个问题得到了回答并解决了我所有的问题。@DanMcGhan,我正在将其投入生产过程中。想了解一些关于加入怪物的事情。有没有一种方法可以在select语句中使用oracle提示。我们如何提高联接的性能?提前谢谢。如果需要的话,我可以提出一个新问题。再见,非常感谢Dan。我是你在Oracle的Nodejs博客的忠实读者。你在这里的介绍帮助我澄清了我这边的很多事情,现在我再也看不到那个错误了。但有一个问题是,对于突变,我们有没有像join monster这样的插件,我不这么认为。不过,对于突变,编写自己的解析器可能不是太糟糕。实际上,查询很困难,因为它们可以嵌套并引用多个类型(外键),这会导致复杂的动态SQL。谢谢@DanMcGhan。这个问题得到了回答并解决了我所有的问题。@DanMcGhan,我正在将其投入生产过程中。想了解一些关于加入怪物的事情。有没有一种方法可以在select语句中使用oracle提示。我们如何提高联接的性能?提前谢谢。如果需要,我可以提出一个新问题。