我需要提供自定义自定义对象作为GraphQL解析器的输出。
这是针对具有GraphQL设置的Node-Express后端服务器。我尝试了序列化,但是我正在测试一种新方法,在该方法中,我需要将一个对象作为输出传递到graphQL。
const RootQueryType = new GraphQLObjectType({
name: "Query",
fields: {
Sample: {
type: SampleType,
args: {
sampleID: { type: GraphQLID }
},
resolve: async (parent, args) => {
try {
const result = await sql.connect(config).then(pool =>
pool
.request()
.input("sampleID", sql.Int, args.sampleID)
.query(
"SELECT * FROM samples WHERE sampleID = @sampleID"
)
);
const ASB = await result.recordsets[0];
console.log(ASB);
sql.close();
return ASB;
} catch (err) {
console.log(err);
sql.close();
return;
}
}
}
}
});
查询输出的结果是
[
{
sampleID: 1,
sampleText: 'sample1'
},
{
sampleID: 2,
sampleText: 'sample2'
}
]
当我返回普通对象即ASB [0]
{
sampleID: 1,
sampleText: 'sample1'
}
我正在GraphQL中获得输出,但是当返回整个ASB对象时,我将无法输出。
问题是您将类型声明为单项SampleType
,但返回了SampleType
的数组
您可以解决,将SampleType
更改为new GraphQLList(SampleType)
const RootQueryType = new GraphQLObjectType({
name: "Query",
fields: {
Sample: {
type: new GraphQLList(SampleType), // THIS LINE !!!
args: {
sampleID: { type: GraphQLID }
},
resolve: async (parent, args) => {
try {
const result = await sql.connect(config).then(pool =>
pool
.request()
.input("sampleID", sql.Int, args.sampleID)
.query(
"SELECT * FROM samples WHERE sampleID = @sampleID"
)
);
const ASB = await result.recordsets[0];
console.log(ASB);
sql.close();
return ASB;
} catch (err) {
console.log(err);
sql.close();
return;
}
}
}
}
});