Giter Site home page Giter Site logo

graphql-mongodb-server's People

Contributors

dependabot[bot] avatar leonardomso avatar pranayag15 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

graphql-mongodb-server's Issues

How to define a nested property?

I want to save in the database posts, that have a nested property, like this:

const post = {
  title: 'some title',
  body: 'some text',
  date: {
    published: '2019-06-28T10:00:00',
    updated: '2019-06-29T11:00:00'
  }
}

I try it like this:

1. /server/models/posts

const PostSchema = new Schema({
  title: {
    type: String,
    required: true
  },
  body: {
    type: String,
    required: true
  },
  date: {
    published: {
      type: Date,
      default: Date.now()
    },
    updated: {
      type: Date,
      default: Date.now()
    }
  }
});

2. /graphql/types/Post/index.js

export default `
  type Dates {
    published: String
    updated: String
  }

  type Post {
    _id: ID!
    title: String!
    body: String!
    date: Dates
  }

  type Query {
    post(_id: ID!): Post!
    posts: [Post!]!
  }

  type Mutation {
    createPost(post: CreatePostInput): Post!
    updatePost(_id: ID!, post: UpdatePostInput): Post!
    deletePost(_id: ID!): Post!
  }

  type Subscription {
    post: PostSubscriptionPayload!
  }

  type PostSubscriptionPayload {
    mutation: MutationType!
    post: Post!
  }

  input CreatePostInput {
    title: String!
    body: String!
    date: Dates
  }
  
  input UpdatePostInput {
    title: String
    body: String
    date: Dates
  }

  enum MutationType {
    CREATED
    DELETED
    UPDATED
  }
`;

3. /graphql/resolvers/Post/index.js

import Post from "../../../server/models/Post";

export default {
  Query: {
    post: async (parent, { _id }, context, info) => {
      return await Post.findOne({ _id }).exec();
    },
    posts: async (parent, args, context, info) => {
      const res = await Post.find({})
        .populate()
        .exec();

      return res.map(u => ({
        _id: u._id.toString(),
        title: u.title,
        body: u.body,
        date: u.date
      }));
    }
  },
  Mutation: {
    createPost: async (parent, { post }, context, info) => {
      const newPost = await new Post({
        title: post.title,
        body: post.body,
        date: post.date
      });
      try {
        const result = await new Promise((resolve, reject) => {
         newPost.save((err, res) => {
            err ? reject(err) : resolve(res);
          });
        });

        return newPost;
      } catch (error) {
        console.log(error);
        throw error;
      }
    },
    updatePost: async (parent, { _id, post }, context, info) => {
      return new Promise((resolve, reject) => {
        Post.findByIdAndUpdate(_id, { $set: { ...post } }, { new: true }).exec(
          (err, res) => {
            err ? reject(err) : resolve(res);
          }
        );
      });
    },
    deletePost: async (parent, { _id }, context, info) => {
      try {
        // searching for creator of the post and deleting it from the list
        const post = await Post.findById(_id);
        return new Promise((resolve, reject) => {
          Post.findByIdAndDelete(_id).exec((err, res) => {
            err ? reject(err) : resolve(res);
          });
        });
      } catch (error) {
        console.log(error);
        throw error;
      }
    }
  },
  Subscription: {
    post: {
      subscribe: (parent, args, { pubsub }) => {
        //return pubsub.asyncIterator(channel)
      }
    }
  },
  Post: {
  }
};

When I test the createPost mutation, then I get the following error message:

The type of UpdatePostInput.date must be Input Type but got: Dates.
at assertValidSchema (C:\Workspace\Sites\react\graphql\node_modules\graphql\type\validate.js:71:11)
at Object.validate (C:\Workspace\Sites\react\graphql\node_modules\graphql\validation\validate.js:55:35)
at doRunQuery (C:\Workspace\Sites\react\graphql\node_modules\apollo-server-core\src\runQuery.ts:181:30)
at C:\Workspace\Sites\react\graphql\node_modules\apollo-server-core\src\runQuery.ts:80:39
at process._tickCallback (internal/process/next_tick.js:68:7)
Error: The type of CreatePostInput.date must be Input Type but got: Dates.

Updating user Posts array when createPost

Hey man, thanks for the awesome thing you've built!

I got your server running and connected, but when I create a Post it's not added to the User's array of posts.

What was your solution to it?

I'm trying to add on my logic on top and if I get it working I'll create a pull request.

Cheers 💪

User is not defined

I followed the directions in the readme.md. The following query returns the following error.

'''{
users {
id
}
}
'''

'''{
"errors": [
{
"message": "User is not defined",
"locations": [
{
"line": 2,
"column": 3
}
],
"path": [
"users"
]
}
],
"data": {
"users": null
}
}'''

Cannot GET /playground

After installing and starting the server:

npm start

> [email protected] start C:\Workspace\Sites\react\graphql-mongodb-server
> npm run server


> [email protected] server C:\Workspace\Sites\react\graphql-mongodb-server
> nodemon --exec babel-node server/index.js

[nodemon] 1.18.10
[nodemon] to restart at any time, enter `rs`
[nodemon] watching: *.*
[nodemon] starting `babel-node server/index.js`
Browserslist: caniuse-lite is outdated. Please run next command `yarn upgrade caniuse-lite browserslist`
�� Server is running on http://localhost:4000
MongoDB connected

I receive the following error message at http://localhost:4000/playground:

Cannot GET /playground

If I change the URL e.g. to http://localhost:4000/graphql, then I get:

Cannot GET /graphql

In the console I see the following error messages:

Content Security Policy: The page’s settings blocked the loading of a resource at inline (“default-src”). users:1:1
Content Security Policy: The page’s settings blocked the loading of a resource at data:font/woff2;base64,d09GMgABAAAAADKgA… (“default-src”).
Content Security Policy: The page’s settings blocked the loading of a resource at data:font/woff2;base64,d09GMgABAAAAADB4A… (“default-src”).
Content Security Policy: The page’s settings blocked the loading of a resource at data:font/woff2;base64,d09GMgABAAAAABDIA… (“default-src”).
Content Security Policy: The page’s settings blocked the loading of a resource at data:font/woff2;base64,d09GMgABAAAAABkIA… (“default-src”).
Content Security Policy: The page’s settings blocked the loading of a resource at data:font/woff2;base64,d09GMgABAAAAABqsA… (“default-src”).
Content Security Policy: The page’s settings blocked the loading of a resource at data:font/woff2;base64,d09GMgABAAAAABUkA… (“default-src”).
Content Security Policy: The page’s settings blocked the loading of a resource at data:font/woff2;base64,d09GMgABAAAAAB4AA… (“default-src”).
Content Security Policy: The page’s settings blocked the loading of a resource at inline (“default-src”). users:1:1
Content Security Policy: The page’s settings blocked the loading of a resource at eval (“default-src”).
Source map error: TypeError: NetworkError when attempting to fetch resource.
Resource URL: moz-extension://83088240-0f93-4b6a-9152-e32a2373f081/node_modules/webextension-polyfill/dist/browser-polyfill.js
Source Map URL: browser-polyfill.js.map[Learn More]
Source map error: TypeError: NetworkError when attempting to fetch resource.
Resource URL: moz-extension://8dd165e0-5819-47ef-98ca-542db01eafbb/content/js/purify.min.js
Source Map URL: purify.min.js.map[Learn More]```

How to sort / filter the posts

I have a simple request like this:

query {Posts{_id title date {published}}}

How can I sort the posts e.g. by publishing date and limit the number of posts? And how can I filter the posts, e.g. that I get only posts older than some date?

how to create post with graphql ?

I`m a new starter for express and graphql, thank you for this demo project.
I can create user,query user,users and update user, but I dont know how to create post with graphql.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.