【问题标题】:Next JS connection with Apollo and MongoDBNext JS 与 Apollo 和 MongoDB 的连接
【发布时间】:2020-08-13 11:40:24
【问题描述】:

我是 Next.js 的新手,并使用 Next.js https://github.com/zeit/next.js/tree/master/examples/api-routes-apollo-server-and-client 中的这个示例。

但是,该示例未提及 MongoDB 集成(我也找不到任何其他相同示例)。我已经能够建立数据库连接,但无法在解析器中使用它。

我的代码

pages/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 中的缓存数据库连接。如果我创建一个新的数据库连接文件,那里不支持顶级等待,那么我该如何继续?

【问题讨论】:

    标签: mongodb async-await graphql next.js apollo


    【解决方案1】:

    如果context 是一个函数,则从该函数返回的任何内容都将作为解析器中的context 参数提供。因此,如果您返回 { db },这就是您的 context 参数 - 换句话说,您可以在解析器中以 context.db 的形式访问它。

    【讨论】:

      猜你喜欢
      • 2020-06-13
      • 1970-01-01
      • 2019-10-09
      • 2019-02-22
      • 2023-02-05
      • 2016-05-02
      • 1970-01-01
      • 2022-01-20
      • 2019-07-11
      相关资源
      最近更新 更多