GraphQL 不允许查询不同的字段



我是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]
}

但它说人只能定义一次。

不能"重载"字段定义。您可以使用可为null的参数定义单个字段

person(personId: Int, name: String)

或创建不同名称的字段

personById(id: Int!)
personByName(name: String!)

最新更新