TypeError:无法读取未定义的属性“ shawarmaOrdered”

时间:2020-08-28 18:33:51

标签: node.js mongoose graphql apollo-server

我是GraphQL和mongoose的新手,并尝试在解析器中创建一个创建shawarma订单的函数,所需输入是shawarma ID,数量和地址,当我运行下面键入的代码时,我得到了错误状态

TypeError:无法读取未定义的属性“ shawarmaOrdered”

解析器代码:

import mongoose from 'mongoose';
import AuthenticationError from 'apollo-server';
import {shawarma} from '../models/shawarmaModel';

export default {
    Query:{

    },
    Mutation: {
        createOrder: async(parent, {OrderInput}, {models: {orderModel, shawarmaModel}}, info) => {
            console.log('reached1')
            try{
                const {shawarmaOrdered, quantity, address} = OrderInput;
                const order = await orderModel.updateOne({shawarmaOrdered, quantity, address})
                return order
             

            } catch(err){
                console.log('errorr')
                console.log(err)
            }

        }
    },

    Order: {
        shawarmaOrdered: async(parent, {shawarmaOrdered}, {models:shawarmaModel}, info) =>{
            return shawarmaOrdered = shawarmaModel.find((shawarma)=>{
                return shawarma.id == parent.id
            })
        }
    }

架构代码:

import {gql} from 'apollo-server'

export default gql`

type Order{
    id: ID!
    shawarmaOrdered: Shawarma!
    quantity: Int 
    orderedTo: String
}

input OrderInput{
    shawarmaOrdered: ID!
    quantity: Int
    orderedTo: String
}


extend type Query {
    order(id: ID!): Order!
}


extend type Mutation {
        createOrder(shawarmaOrdered: String!, quantity: Int!, orderedTo: String!): Order!
}
`

订单模型代码:

import mongoose, { Mongoose } from 'mongoose'
import shawarma from './shawarmaModel'

const orderSchema = new mongoose.Schema({

    shawarmaOrdered: {
        type: mongoose.Schema.Types.ObjectId,
        ref: shawarma
    },
        
    quantity: {
        type: Number
    },

   completed: {
       type: Boolean,
       default: false
   }
})

const order = mongoose.model('order', orderSchema)
export default order;

请让我知道我做错了什么

1 个答案:

答案 0 :(得分:0)

所以这是我解决问题的方法。

在index.js文件中

import cors from 'cors';
import express from 'express';
import jwt from 'jsonwebtoken';
import mongoose from 'mongoose';
import { ApolloServer, AuthenticationError } from 'apollo-server-express';

import schemas from './schemas';
import resolvers from './resolvers';

import userModel from './models/userModel';
import orderModel from './models/orderModel';
import shawarmaModel from './models/shawarmaModel';

const app = express();
app.use(cors());

const getUser = async (req) => {
  const token = req.headers['token'];

  // console.log(token)

  if (token) {
    try {
      return await jwt.verify(token, 'riddlemethis');
    } catch (e) {
        console.log(e)
      throw new AuthenticationError('Your session expired. Sign in again.');
    }
  }
};

const server = new ApolloServer({
  typeDefs: schemas,
  resolvers,
  context: async ({ req }) => {
    if (req) {
      const me = await getUser(req);

      return {
        me,
        models: {
          userModel,
          orderModel, //this was where the orderModel was misspelled as OrderModel
          shawarmaModel
        },
      };
    }
  },
});

server.applyMiddleware({ app, path: '/graphql' });

app.listen(5000, async () => {

    await mongoose.connect('mongodbconnectionString')
});

在上面的代码中,我已注释了错误所在的部分。粗心,调试时我忽略了检查此文件。我的错。很抱歉没有在原始问题中包含此代码