我在返回null的graphQL查询时遇到了一些麻烦,但我不确定为什么它返回null。我读过几篇与此帖子类似的帖子,但是这些帖子都没有帮助您确定我的确切问题。
我认为这与我传递/获取参数有关,因为没有参数的查询工作正常,但是我不确定,因为我无法在线找到其他示例。
任何帮助将不胜感激。
我正在使用apollo服务器,graphql和一个community SQL datasource implementation,后者使用Knex创建数据库连接。
我可以进行两个查询。
graphQL查询:
query{
getPart(itemnum: "T|0000000000001"){
desc
}
}
graphQL响应:
"message": "Cannot return null for non-nullable field Part.desc.",
基于Knex调试消息正在执行的SQL查询:
method: 'select',
options: {},
timeout: false,
cancelOnTimeout: false,
bindings: [ 'T|0000000000001' ],
__knexQueryUid: '3a8234eb-0a5c-46db-ad8e-5508288c9a86',
sql: 'select * from `part` where `itemnum` = ?'
index.js:
const { ApolloServer } = require('apollo-server');
const typeDefs = require('./schema');
const resolvers = require ('./resolvers')
const PartAPI = require ('./datasources/partAPI');
const knexConfig = {
client: "sqlite3",
connection: {
/* CONNECTION INFO */
filename: "./TEAM_material.db3"
},
debug: true
};
const server = new ApolloServer({
typeDefs,
resolvers,
dataSources: () => ({
partAPI: new PartAPI(knexConfig),
}),
introspection: true,
});
server.listen().then(({ url }) => {
console.log(`? Server ready at ${url}`);
});
partAPI.js:
const { SQLDataSource } = require("datasource-sql");
const MINUTE = 60;
class PartAPI extends SQLDataSource {
getPart(itemnum){
return this.knex.select('*').from('part').where({itemnum});
}
getAllParts(){
const query = this.knex.select('*').from('part').cache(MINUTE);
console.log (query);
return query;
}
}
module.exports = PartAPI;
schema.js
// src/schema.js
const { gql } = require('apollo-server')
const typeDefs = gql`
#Types
type Part {
itemnum: String!
desc: String!
vendor: String!
manuf: String!
venlist: Float!
price: Float!
teamlist: Float!
teamsell: Float!
unitypart: String!
pkgqty: Int!
ioType: String!
preferred: Boolean!
filterlvl1: String!
filterlvl2: String!
filterlvl3: String!
filterlvl4: String!
ipwiretype: String!
opwiretype: String!
obsolete: Boolean!
}
#Queries
type Query {
getPart(itemnum: String!): Part
allParts: [Part!]!
}
`;
module.exports = typeDefs
resolvers.js
// src/resolvers.js
const resolvers = {
Query: {
getPart: (_,args,{dataSources}) => dataSources.partAPI.getPart(args.itemnum),
allParts: (_,__,{dataSources}) => dataSources.partAPI.getAllParts(),
},
};
module.exports = resolvers
答案 0 :(得分:1)
证明我的架构不正确。 getPart查询期望使用Part,但是我的查询返回的是Part数组。
旧架构
#Queries
type Query {
getPart(itemnum: String!): Part
allParts: [Part!]!
}
`;
新架构
#Queries
type Query {
getPart(itemnum: String!): [Part]!
allParts: [Part!]!
}
`;