GraphQL 不允许查询不同的字段
Posted
技术标签:
【中文标题】GraphQL 不允许查询不同的字段【英文标题】:GraphQL doesn't allow querying on different fields 【发布时间】:2020-07-02 15:09:53 【问题描述】:我是 GraphQL 的绝对初学者。如果问题是业余的,请道歉。我正在编写这个 graphQL 端点,它将按姓名过滤人员。效果很好,但我希望能够
按姓名、年龄、电话号码等多个参数过滤
或
使用参数组合搜索..
我目前的计划:
var express = require("express");
var express_graphql = require("express-graphql");
var buildSchema = require("graphql");
var Sequelize = require("sequelize")
var db = new Sequelize(
"users",
"root",
"pass",
host: "localhost",
dialect: "mysql"
);
var calls = db.define(
"calls",
person_id:
type: Sequelize.INTEGER,
allowNull: false,
primaryKey: true
,
name:
type: Sequelize.STRING,
allowNull: false
,
age:
type: Sequelize.INTEGER,
allowNull: false
,
address:
type: Sequelize.STRING,
allowNull: false
,
company:
type: Sequelize.String,
allowNull: false
,
email:
type: Sequelize.STRING,
allowNull: false
,
tableName: "person"
);
// Construct a schema, using GraphQL schema language
var schema = buildSchema(`
type Query
Person(person_id: Integer!): [Person]
type Person
person_id: Integer
name: String
age: Integer
address: String
company: String
email: String
`);
var getperson = function(args)
if (args.person_id)
var p_name = args.person_id;
return calls.findAll(
where:
name: p_name
);
;
// The root provides a resolver function for each API endpoint
var root =
person: getperson
;
var app = express();
app.use(
"/graphql",
express_graphql(
schema: schema,
rootValue: root,
graphiql: true
)
);
app.listen(4000);
console.log("Running a GraphQL API server at http://localhost:4000/graphql");
试过这样做:
type Query
Person(person_id: Integer!): [Person]
Person(name: String!): [Person]
但它说 Person 只能定义一次。
【问题讨论】:
顺便说一句,你probably shouldn't be using buildSchema。 【参考方案1】:您不能“重载”字段定义。您可以使用可为空的参数定义单个字段
person(personId: Int, name: String)
或创建不同名称的字段
personById(id: Int!)
personByName(name: String!)
【讨论】:
以上是关于GraphQL 不允许查询不同的字段的主要内容,如果未能解决你的问题,请参考以下文章