gpt4 book ai didi

mysql - GraphQL - 根据参数返回计算类型

转载 作者:IT老高 更新时间:2023-10-28 23:21:36 25 4
gpt4 key购买 nike

概览(简体):

在我的 NodeJS 服务器中,我实现了以下 GraphQL 架构:

type Item {
name: String,
value: Float
}


type Query {
items(names: [String]!): [Item]
}

客户端查询然后传递一个名称数组作为参数:

{
items(names: ["total","active"] ) {
name
value
}
}

后端 API 查询 mysql 数据库中的“total”和“active”字段(我的数据库表上的列)并减少响应,如下所示:

[{"name":"total" , value:100} , {"name":"active" , value:50}]

我希望我的 graphQL API 支持“比率”项,即:我想发送以下查询:

{
items(names: ["ratio"] ) {
name
value
}
}

{
items(names: ["total","active","ratio"] ) {
name
value
}
}

并返回 active/total 作为该新字段的计算结果 ([{"name":"ratio", value:0.5}])。以不同方式处理“ratio”字段的通用方法是什么?

它应该是我的架构中的一种新类型,还是应该在 reducer 中实现逻辑?

最佳答案

Joe 的回答(从数据库中获取结果后,将 {"name":"ratio", value:data.active/data.total} 附加到结果中)不会做任何事情架构更改。

作为替代方法或更优雅的方式在 GraphQL 中执行此操作,可以在类型本身中指定字段名称,而不是将它们作为参数传递。并通过编写解析器来计算 ratio

因此,GraphQL 架构将是:

Item {
total: Int,
active: Int,
ratio: Float
}

type Query {
items: [Item]
}

客户端指定字段:

{
items {
total
active
ratio
}
}

并且ratio可以在resolver内部计算出来。

代码如下:

const express = require('express');
const graphqlHTTP = require('express-graphql');
const { graphql } = require('graphql');
const { makeExecutableSchema } = require('graphql-tools');
const getFieldNames = require('graphql-list-fields');

const typeDefs = `
type Item {
total: Int,
active: Int,
ratio: Float
}

type Query {
items: [Item]
}
`;

const resolvers = {
Query: {
items(obj, args, context, info) {
const fields = getFieldNames(info) // get the array of field names specified by the client
return context.db.getItems(fields)
}
},
Item: {
ratio: (obj) => obj.active / obj.total // resolver for finding ratio
}
};

const schema = makeExecutableSchema({ typeDefs, resolvers });

const db = {
getItems: (fields) => // table.select(fields)
[{total: 10, active: 5},{total: 5, active: 5},{total: 15, active: 5}] // dummy data
}
graphql(
schema,
`query{
items{
total,
active,
ratio
}
}`,
{}, // rootValue
{ db } // context
).then(data => console.log(JSON.stringify(data)))

关于mysql - GraphQL - 根据参数返回计算类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47331391/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com