从上下文中获取模型与导入 - apollo server express & mongoose

Posted

技术标签:

【中文标题】从上下文中获取模型与导入 - apollo server express & mongoose【英文标题】:Get model from context vs Import - apollo server express & mongoose 【发布时间】:2020-11-08 03:13:47 【问题描述】:

我想知道是否有区别,或者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)
  ,

【问题讨论】:

【参考方案1】:

无论您使用什么 ORM 或查询构建器,通过上下文将依赖项注入解析器都会更好。

    易于测试。我们可以为User 创建模拟对象并轻松使用它。遵循依赖倒置原则。

    如果您有多个解析器,则无需为每个解析器导入User。只需在初始化上下文的文件中导入一次。 用于初始化上下文的模块在一个文件中管理,而不是分散在各处

    某些模块可能只需要初始化一次并将实例传递给上下文。

【讨论】:

以上是关于从上下文中获取模型与导入 - apollo server express & mongoose的主要内容,如果未能解决你的问题,请参考以下文章

如何将 React 钩子(useContext、useEffect)与 Apollo 反应钩子(useQuery)结合起来

将所有 Meteor 用户传递给 Apollo 上下文

在 Apollo Server 上下文中获取 NextAuth.js 用户会话

Apollo readQuery,从缓存中获取数据

Apollo启动报Config service failed to start in 120 seconds! Please check ./service/apollo-ser

Apollo启动报Config service failed to start in 120 seconds! Please check ./service/apollo-ser