phpsmarter
2/23/2018 - 11:13 AM

Apollo-Mongodb-Server

Apollo-Mongodb-Server

const express = require('express');
const bodyParser = require('body-parser');
const Mongoose = require('mongoose');

const PORT = 8080;
const app = express();
const { apolloExpress, graphiqlExpress } = require('apollo-server');
const { makeExecutableSchema } = require('graphql-tools');

Mongoose.Promise = global.Promise;
Mongoose.connect('mongodb://localhost/apollo', (err) => {
  if (err) {
    return err;
  }
  return true;
});

const seed = require('./seed');

seed();

const Schema = require('./schema');
const Resolvers = require('./resolvers');
const Connectors = require('./connectors');

const executableSchema = makeExecutableSchema({
  typeDefs: Schema,
  resolvers: Resolvers,
});

app.use('/graphql', bodyParser.json(), apolloExpress({
  schema: executableSchema,
  context: {
    constructor: Connectors,
  },
}));

app.use('/graphiql', graphiqlExpress({
  endpointURL: '/graphql',
}));

app.listen(PORT, () => console.log(
  `GraphQL Server is now running on http://localhost:${PORT}/graphql`
));
const resolveFunctions = {
  RootQuery: {
    president(_, { name }, ctx) {
      const president = new ctx.constructor.President();
      return president.findPresident(name);
    },
  },
};

module.exports = resolveFunctions;
const PresidentModel = require('./model');

class President {
  constructor() {
    this.findPresident = (name) => {
      const person = PresidentModel.findOne({ name }, (error, data) => {
        return data;
      });
      return person;
    };
  }
}

module.exports = { President };
view raw
const typeDefinitions = `
type President {
  name: String
  party: String
  term: String
}
type RootQuery {
  president(name: String, party: String, term: String): President
}
schema {
  query: RootQuery
}
`;

module.exports = [typeDefinitions];
const request = require('request-promise');
const President = require('./model');

const seed = () => {
  request('https://mysafeinfo.com/api/data?list=presidents&format=json')
    .then(res => JSON.parse(res))
    .then((res) => {
      const data = res.map((r) => {
        const obj = {};
        obj.name = r.nm;
        obj.party = r.pp;
        obj.term = r.tm;
        return obj;
      });
      data.forEach((d) => {
        const president = new President(d);
        president.save((err, item) => {
          console.log('saved:', item);
        });
      });
    })
    .catch((err) => {
      console.log('err:', err);
    });
};

module.exports = seed;
const Mongoose = require('mongoose');

const PresidentSchema = Mongoose.Schema({
  name: String,
  party: String,
  term: String,
});

const President = Mongoose.model('President', PresidentSchema);

module.exports = President;