"TypeError: Невозможно прочитать свойство 'getAllParts' из неопределенного в allParts .. \\ resolvers. js: 6: 62)", - PullRequest
0 голосов
/ 26 февраля 2020

У меня проблемы с выяснением, почему объект, чье свойство вызывается, не определен. Я использую graphql, apollo-server и следующий тип источника данных https://github.com/cvburgess/SQLDataSource.

Я искал несколько сообщений, но ничего не нашел, помогло.

Я знаю, что это связано с чем-то, что передается неправильно. Я просто не понимаю, почему это не передается правильно.

resolvers. js

const resolvers = {
    Query: {
       //getPart: (_,{itemnum},{dataSources}) => dataSources.partAPI.getPart({itemnum: itemnum}),
       allParts: (_,__,{dataSources}) => dataSources.partAPI.getAllParts(),
      },
};

module.exports = resolvers

и вот остальная часть моего кода

Index. js

const { ApolloServer } = require('apollo-server');
const typeDefs = require('./schema');
const resolvers = require ('./resolvers')
const PartAPI = require ('./datasources/part');

const knexConfig = {
  client: "sqlite3",
  connection: {
    /* CONNECTION INFO */
    filename: "./TEAM_material.db3"
  }
};

  const db = new PartAPI(knexConfig);

const server = new ApolloServer({ 
    typeDefs,
    resolvers,
    dataSources: () => ({db}),
    introspection: true,
 });

server.listen().then(({ url }) => {
    console.log(`? Server ready at ${url}`);
  });

Схема. 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

часть. js

const { SQLDataSource } = require("datasource-sql");



const MINUTE = 60;

class PartAPI extends SQLDataSource {

    async getPart({itemnum}){
        return this.knex.select("*").from("part").where('itemnum', itemnum).cache(60);
    }

    async getAllParts(){
        return this.knex.select("*").from("part").cache(MINUTE);
    }
}

module.exports = PartAPI;

1 Ответ

0 голосов
/ 26 февраля 2020

@ Даниэль Реарден. Спасибо вам за помощь. Из того, что вы сказали, я смог сделать вывод, что мне нужно передать это в конструктор APolloServer.

const server = new ApolloServer({ 
    typeDefs,
    resolvers,
    dataSources: () => ({
      partAPI: new PartAPI(knexConfig),
    }),
    introspection: true,
 });
...