从上下文获取模型与导入 - apollo server express & mongoose
Get model from context vs Import - apollo server express & mongoose
我想知道是否存在差异,或者 apollo-server
通过 mongoose
查询 mongodb
的最佳做法是什么
从上下文中获取模型:
import User from './User'
const apolloServer = new ApolloServer({
typeDefs,
resolvers,
context: ({ req, res }) => ({
req,
res,
User,
}),
getUser(parent, args, context, info) {
return context.User.findOne({ _id: args.id})
},
VS
import User from './User'
getUser(parent, args, context, info) {
return User.findOne({ _id: args.id})
},
无论您使用什么 ORM 或查询构建器,通过上下文将依赖项注入解析器都更好。
易于测试。我们可以为 User
创建模拟对象并轻松使用它。遵循依赖倒置原则。
如果您有很多解析器,则不需要为每个解析器导入 User
。只需在初始化上下文的文件中导入一次。
初始化上下文的模块集中在一个文件中,而不是分散在各处
有些模块可能只需要初始化一次,然后将实例传递给context。
我想知道是否存在差异,或者 apollo-server
通过 mongoose
mongodb
的最佳做法是什么
从上下文中获取模型:
import User from './User'
const apolloServer = new ApolloServer({
typeDefs,
resolvers,
context: ({ req, res }) => ({
req,
res,
User,
}),
getUser(parent, args, context, info) {
return context.User.findOne({ _id: args.id})
},
VS
import User from './User'
getUser(parent, args, context, info) {
return User.findOne({ _id: args.id})
},
无论您使用什么 ORM 或查询构建器,通过上下文将依赖项注入解析器都更好。
易于测试。我们可以为
User
创建模拟对象并轻松使用它。遵循依赖倒置原则。如果您有很多解析器,则不需要为每个解析器导入
User
。只需在初始化上下文的文件中导入一次。 初始化上下文的模块集中在一个文件中,而不是分散在各处有些模块可能只需要初始化一次,然后将实例传递给context。