Подключение модели mongodb к apollo-server 2.0

Я следую руководству, в котором используется база данных mongo с graphql, в настоящее время наставник использует apollo-server v1, но я использую apollo-server v2, проблема, с которой я сталкиваюсь, заключается в том, где я могу подключить свои модели к graphql,

const express = require("express");
const mongoose = require("mongoose");
const bodyParser = require("body-parser");
const cors = require("cors");
require("dotenv").config({ path: "variables.env" });
const Recipe = require("./models/Recipe");
const User = require("./models/User");

// Bring in GraphQL-Express middleware
const { graphiqlExpress, graphqlExpress } = require("apollo-server-express");
const { makeExecutableSchema } = require("graphql-tools");

const { typeDefs } = require("./schema");
const { resolvers } = require("./resolvers");

// Create schema
const schema = makeExecutableSchema({
  typeDefs,
  resolvers
});

// Connects to database
mongoose
  .connect(process.env.MONGO_URI)
  .then(() => console.info("DB connected"))
  .catch(err => console.error(err));

// Initializes application
const app = express();

const corsOptions = {
  origin: "http://localhost:3000",
  credentials: true
};
app.use(cors(corsOptions));

// Create GraphiQL application
app.use("/graphiql", graphiqlExpress({ endpointURL: "/graphql" }));

// Connect schemas with GraphQL
app.use(
  "/graphql",
  bodyParser.json(),
  graphqlExpress({
    schema,
    context: {
      Recipe,
      User
    }
  })
);

const PORT = process.env.PORT || 4444;

app.listen(PORT, () => {
  console.info(`Server listening on PORT ${PORT}`);
});

поэтому в apollo-server v1 вы передаете свою схему (модели) mongo в graphqlExpress

 Connect schemas with GraphQL
    app.use(
      "/graphql",
      bodyParser.json(),
      graphqlExpress({
        schema,
        context: {
          Recipe,
          User
        }
      })
    );

но в v2 вы больше не используете функцию graphqlExpress,

https://www.apollographql.com/docs/apollo-server/v2/migration-two-dot.html

Итак, как / куда мне передать свои модели базы данных?

в настоящее время у меня есть это

const express = require ('express')
const mongoose = require ('mongoose')
const { ApolloServer } = require('apollo-server-express');

require('dotenv').config({path: 'variables.env'})

// mongo schemas/models
const Recipe = require('./models/Recipe')
const User = require('./models/User')

//Graphql schema
const {typeDefs} = require('./schema')
const {resolvers} = require('./resolvers')

// connects to database
mongoose.connect(process.env.MONGO_URI, {useNewUrlParser: true} )
.then(()=> console.info('DB connected'))
.catch(error => console.info(error))

const PORT = process.env.PORT || 4444;

const server = new ApolloServer({ typeDefs, resolvers });

const app = express();
server.applyMiddleware({ app });

app.listen({ port: PORT }, () =>
  console.info(`? Server ready at http://localhost:${PORT}${server.graphqlPath}`)
)
Использование JavaScript и MongoDB
Использование JavaScript и MongoDB
Сегодня я собираюсь вкратце рассказать о прототипах в JavaScript, а также представить и объяснить вам работу с базой данных MongoDB.
2
0
1 918
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Этот пример отлично работает с PG, если вы используете Mongo, просто замените вызовы pg на mongoose, и все будет хорошо.

Ответ принят как подходящий

Если вы хотите быть точно такими, как были раньше, вам нужно добавить функцию context в свой ApolloServer init:

const server = new ApolloServer({
  typeDefs,
  resolvers,
  context: ({ req }) => ({
    Recipe,
    User
  })
});

Большое спасибо, что исправили это, теперь я получаю сообщение об ошибке, когда я запрашиваю идентификатор, мне нужно будет JSON.stingify моделей? так как идентификатор - «ObjectID», и если да, мне нужно будет сделать это в преобразователе или я могу сделать это в контексте? с сервером appollo v1 вы можете использовать bodyparser следующим образом: "app.use ('/ graphql', bodyParser.json (), graphqlExpress ({schema: myGraphQLSchema}));" но для v2 он уже встроен, насколько я могу судить в документации? [ссылка] (apollographql.com/docs/apollo-server/v2/…) в server.applyMiddleware ({app}); но это не работает для меня?

Ali Khalil 05.09.2018 04:19

ive set server.applyMiddleware ({приложение, bodyParserConfig: true}); а он все равно не работает?

Ali Khalil 05.09.2018 04:45

Другие вопросы по теме