如何解决Apollo 服务器、GraphQL 和 Sequelize - 如何将原始数据放入 GraphQL 模式响应
在互联网上搜索特定示例后,我认输并寻求帮助。
我正在使用 Apollo 服务器、GraphQL 和 Sequelize,并且我正在调用返回从两个不同表创建的记录集的存储过程。我正在取回数据,但我不知道如何将结果放入 GraphQL 架构响应中。
这是我的解析器中的代码:
async functionName(_,{input},{user = null}) {
if (!user) {
throw new AuthenticationError('You must login to use this function');
}
const {record_id} = input;
const result = await DBService.query(
'Call sp_JoinTwoTables_Select(:id)',{
model: FooModel,mapToModel: true,raw: true,replacements: {id: record_id},type: QueryTypes.SELECT
}
);
console.log('functionName.result');
console.log(result); // Getting results
return result;
}
这是我的架构中的代码:
const {gql} = require('apollo-server-express');
module.exports = gql`
type Foo {
id: Int!
foo_name: String!
date_created: String!
date_modified: String!
}
extend type Mutation {
functionName(input: fooInput!): fooResponse!
}
input fooInput {
id: Int!
}
type fooResponse {
tree: [fooSchemaForBothTables!]
}
type fooSchemaForBothTables {
id: Int!
foo_name: String!
column_from_second_table: Int!
}
`;
由于数据库中没有表,所以我创建了一个简单的对象。当失败时,我尝试了一个续集的模型对象,但这也失败了。这是这段代码:
module.exports = {FooModel: {
id: 0,fooName: '',column_from_second_table: 0
}};
我得到的输出是(不是我想象的二维数组):
Executing (default): Call sp_CommunityHierarchy_Select(9)
selectHierarchyTree.result
[
{
'0': {
community_id: 1,community_name: 'Cars',level_from_apex: null,parent_id: null
},'1': {
community_id: 8,community_name: 'Chevy',level_from_apex: 2,parent_id: 1
},'2': {
community_id: 9,community_name: 'Suburban',level_from_apex: 3,parent_id: 8
},Meta: [ [ColumnDef],[ColumnDef],[ColumnDef] ]
},{ affectedRows: 6,insertId: 0,warningStatus: 0 }
]
解决方法
您的“原始”数据库结果:
- 是一个数组;
- 第一个元素是一个对象,其记录/项目编码为索引命名的属性;
您需要的变更(为什么不是查询类型!?)响应应该是 tree: [fooSchemaForBothTables!]
- 具有 tree
命名属性的对象(真的需要额外的嵌套级别?),带有 fooSchemaForBothTables
- 数组形状对象作为值:
{
tree: [
{
id: 1,foo_name: 'Cars`,column_from_second_table: 'whatever`,},{
id: 2,foo_name: 'Chevy`,}
]
}
您的工作是将 DB 响应转换为所需的变异结果形状。
提示:您可以在辅助项目(codesandbox)中对此 DB 结果(一些输入常量)进行硬编码,并编写一些转换 fn。准备好后在这个解析器中使用它。
您还可以搜索一些更可靠的sequelize(暂时不理会graphql)具有“更有效”模型映射的教程。
下一步?
如果它是一棵树,那么为什么不将其作为树结构返回 - 嵌套节点/类型?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。