Next JS 与 Apollo 和 MongoDB 的连接
Posted
技术标签:
【中文标题】Next JS 与 Apollo 和 MongoDB 的连接【英文标题】:Next JS connection with Apollo and 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
中的缓存数据库连接。如果我创建一个新的数据库连接文件,那里不支持***等待,那么我该如何继续?
【问题讨论】:
【参考方案1】:如果context
是一个函数,则从该函数返回的任何内容都将作为解析器中的context
参数提供。因此,如果您返回 db
,这就是您的 context
参数 - 换句话说,您可以在解析器中以 context.db
的形式访问它。
【讨论】:
以上是关于Next JS 与 Apollo 和 MongoDB 的连接的主要内容,如果未能解决你的问题,请参考以下文章
使用 Next Js getServerSideProps 进行 Apollo 查询?
Next.js/Next-Auth/Apollo/GraphQL 设置
无法在单个 GraphQL 查询中组合本地和远程数据(Next.js + Apollo)
Apollo Client GraphQL 在 Next.js getStaticProps 上创建静态页面