Следующая JS связь с Apollo и MongoDB - PullRequest
0 голосов
/ 29 апреля 2020

Я новичок в Next. js и использую этот пример из Next. js https://github.com/zeit/next.js/tree/master/examples/api-routes-apollo-server-and-client.

Однако в примере ничего не сказано об интеграции MongoDB (также я не мог найти другой пример для того же). Я смог установить соединение с базой данных, но НЕ смог использовать его в средствах распознавания.

Мой код

страниц / api / graphql. js

import { ApolloServer } from 'apollo-server-micro'
import { schema } from '../../apollo/schema'

const MongoClient = require('mongodb').MongoClient;

let db

const apolloServer = new ApolloServer({
 schema,
 context: async () => {
  if (!db) {
   try {
    const client = await MongoClient.connect(uri)
    db = await client.db('dbName')
    const post = await Posts.findOne()
    console.log(post)
   // It's working fine here
   }
   catch (e) {
     // handle any errors
   }
 }
 return { db }
 },
})

export const config = {
  api: {
    bodyParser: false,
  },
}

export default apolloServer.createHandler({ path: '/api/graphql' })

apollo / schema. js

import {makeExecutableSchema} from 'graphql-tools';
import {typeDefs} from './type-defs';
import {resolvers} from './resolvers';

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

apollo / resolvers. js

const Items = require('./connector').Items;
export const resolvers = {
    Query: {
        viewer(_parent, _args, _context, _info) {
            //want to populate values here, using database connection
            return { id: 1, name: 'John Smith', status: 'cached' }
        },
        ...
    }
}

Я застрял в resolvers.js части. Не знаю, как получить соединение с кэшированной базой данных внутри resolvers.js. Если я создаю новый файл подключения к базе данных, ожидание верхнего уровня там не поддерживается, так как мне продолжить?

1 Ответ

1 голос
/ 29 апреля 2020

Если context - функция, то, что вы возвращаете из функции, будет доступно как параметр context в вашем преобразователе. Поэтому, если вы возвращаете { db }, это будет ваш параметр context - другими словами, вы можете получить к нему доступ как context.db внутри вашего преобразователя.

...