与 Apollo 和 MongoDB 的下一个 JS 连接
Next JS connection with Apollo and MongoDB
我是 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
中的缓存数据库连接。如果我创建一个新的数据库连接文件,那里不支持顶级等待,那么我该如何继续?
如果 context
是一个函数,那么您从该函数 return 得到的任何内容都可以作为解析器中的 context
参数使用。因此,如果您 returning { db }
,这就是您的 context
参数的内容——换句话说,您可以在解析器中将其作为 context.db
访问。
我是 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
中的缓存数据库连接。如果我创建一个新的数据库连接文件,那里不支持顶级等待,那么我该如何继续?
如果 context
是一个函数,那么您从该函数 return 得到的任何内容都可以作为解析器中的 context
参数使用。因此,如果您 returning { db }
,这就是您的 context
参数的内容——换句话说,您可以在解析器中将其作为 context.db
访问。