连接 Apollo 和 mongodb

2024-04-17

我想将我的 Apollo 服务器与我的 mongoDB 连接。我知道那里有很多例子,但我陷入了异步部分,没有找到解决方案或示例(这很奇怪,我完全错了吗?)

我从 next.js 的示例开始https://github.com/zeit/next.js/tree/master/examples/api-routes-apollo-server-and-client https://github.com/zeit/next.js/tree/master/examples/api-routes-apollo-server-and-client。 但缺少 mongodb 集成。

My code

页面/api/graphql.js

    import {ApolloServer} from 'apollo-server-micro';
    import {schema} from '../../apollo/schema';

    const apolloServer = new ApolloServer({schema});

    export const config = {
        api: {
            bodyParser: false
        }
    };

    export default apolloServer.createHandler({path: '/api/graphql'});

阿波罗/schema.js

    import {makeExecutableSchema} from 'graphql-tools';
    import {typeDefs} from './type-defs';
    import {resolvers} from './resolvers';

    export const schema = makeExecutableSchema({
        typeDefs,
        resolvers
    });

阿波罗/resolvers.js

    const Items = require('./connector').Items;
    export const resolvers = {
        Query: {
            item: async (_parent, args) => {
                const {id} = args;
                const item = await Items.findOne(objectId(id));
                return item;
            },
            ...
        }
    }

阿波罗/connector.js

    require('dotenv').config();
    const MongoClient = require('mongodb').MongoClient;

    const password = process.env.MONGO_PASSWORD;
    const username = process.env.MONGO_USER;
    const uri = `mongodb+srv://${username}:${password}@example.com`;

    const client = await MongoClient.connect(uri);
    const db = await client.db('databaseName')
    const Items = db.collection('items')

    module.exports = {Items}

所以问题是await in connector.js。我不知道如何在异步函数中调用它,也不知道如何以其他方式向解析器提供 MongoClient。如果我只是删除await,它显然返回一个待处理的承诺并且无法调用该函数.db('databaseName') on it.


不幸的是,我们距离实现这一目标还有很长的路要走顶级等待 https://github.com/babel/proposals/issues/44.

您可以延迟运行其余代码,直到 Promise 解决为止,方法是将其放入thenPromise 的回调。

async function getDb () {
  const client = await MongoClient.connect(uri)
  return client.db('databaseName')
}

getDb()
  .then(db => {
    const apollo = new ApolloServer({
      schema,
      context: { db },
    })
    apollo.listen()
  })
  .catch(e => {
    // handle any errors
  })

或者,您可以在第一次需要时创建连接并缓存它:

let db

const apollo = new ApolloServer({
  schema,
  context: async () => {
    if (!db) {
      try {
        const client = await MongoClient.connect(uri)
        db = await client.db('databaseName')
      catch (e) {
        // handle any errors
      }
    }
    return { db }
  },
})
apollo.listen()
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

连接 Apollo 和 mongodb 的相关文章

  • MongoDB,从数组中删除对象

    Doc id 5150a1199fac0e6910000002 name some name items id 23 name item name 23 id 24 name item name 24 有没有办法从数组中提取特定对象 IE
  • PHP 中的 MongoDB - 如何将项目插入集合中的数组中?

    这必须很容易 但我似乎无法弄清楚 假设我有一个集合users这是集合中的第一项 id ObjectId 4d8653c027d02a6437bc89ca name Oscar Godson email email protected cdn
  • 使用 Tweepy 获取推文时出错

    我有一个用于获取推文的 Python 脚本 在脚本中我使用该库 Tweepy 我使用有效的身份验证参数 运行此脚本后 一些推文存储在我的 MongoDB 中 有些则被 if 语句拒绝 但我仍然收到错误 requests packages u
  • Nodejs 一个接一个地运行异步函数

    我是 JS nodejs 的新手 所以如果我不能提出切中要害的问题 请原谅我 所以基本上 如果我有两个异步函数 async function init async function main 如何确保在 init 完成其异步请求后调用 ma
  • Node.js 检测两个猫鼬查找何时完成

    我正在尝试使用自动完成功能初始化两个输入library https www devbridge com sourcery components jquery autocomplete 当我加载页面时 我将触发 Ajax 来初始化两个输入文本
  • 如何使用 next.js 导入带有空格的文件?

    我正在摆弄 next js 我有一个 CSV 文件 其中包含一些我想在表格中显示的数据 当我尝试导入 csv 时遇到一个奇怪的错误 static data csv 1 66 Module parse failed Unexpected to
  • PHP MongoDb 驱动程序:如何设置执行代码的超时

    我有以下代码 它在 MongoDb 端执行一段代码 mongoCode new MongoCode Some JS code db gt execute mongoCode array socketTimeoutMS gt 1000000
  • Mongoose.js instance.save() 回调未触发

    var mongo require mongoose var connection mongo createConnection mongodb 127 0 0 1 test connection on error function err
  • Next.js 中的 .env.local 文件未正确设置

    当我创建一个 env local文件在我的项目根目录中 它设置不正确 在文件中 我有我的 API 密钥 如下所示 API KEY SOME API KEY 然后当我尝试访问它时获取服务器端属性 with 进程 env API KEY 它不起
  • 如何获取数组作为 GraphQL 解析器的输入

    我想得到一个字符串数组ids查询变量中的参数并在我的解析器中使用它 下面是我的代码 People resolver ts import Resolver Query Mutation Args from nestjs graphql imp
  • 使用 async/await 抛出和捕获异常的正确方法

    全部请拿下面的二维码 Task
  • 是否可以提高 Mongoexport 速度?

    我有一个 1 3 亿行的 MongoDB 3 6 2 0 集合 它有几个简单的字段和 2 个带有嵌套 JSON 文档的字段 数据以压缩格式 zlib 存储 我需要尽快将其中一个嵌入字段导出为 JSON 格式 然而 mongoexport 需
  • 由于 apollo-client 未定义,无法解构 GraphQL 查询?

    我正在寻找调试与错误消息相关的问题 未捕获的类型错误 无法解构 0 apollo client WEBPACK IMPORTED MODULE 4 useQuery 因为它未定义 Context 我正在为我的 React js 项目设置后端
  • 使用 MongoDB 和 Nodejs 插入和查询日期

    我需要一些帮助在 mongodb 和 nodejs 中按日期查找记录 我将日期添加到抓取脚本中的 json 对象 如下所示 jsonObj last updated new Date 该对象被插入到 mongodb 中 我可以看到如下 la
  • 异步提交或回滚事务范围

    正如许多人所知 TransactionScope当async await Net 中引入了模式 如果我们尝试使用一些它们就会损坏await在事务范围内调用 现在这个问题已经解决了 感谢范围构造函数选项 a 17527759 1178314
  • 是否有一个好的开源 MongoDB 队列 C# 驱动程序实现

    并不是说编写一个程序不够容易 或有趣 可以说 不重新发明轮子是有道理的 我已经浏览了各种尝试 但我似乎还没有遇到支持这些标准的实现 具有MongoDB持久化的简单队列OSS系统 基于 C 驱动程序 官方 如此完整的 POCO 序列化 可尾游
  • Polly 速率限制过早[重复]

    这个问题在这里已经有答案了 我正在尝试了解 Polly 的速率限制政策 public class RateLimiter private readonly AsyncRateLimitPolicy throttlingPolicy priv
  • MongoRepository动态查询

    我有以下问题 假设我有以下模型对象 class Person String id String firstName String lastName Map
  • mongodb 和 pymongo 文档大小 16Mb 限制

    我正在使用 Windows 上的 showIncludes 标志和 nix 上的 H 标志来分析构建中的包含内容 我正在用 python 脚本解析这些信息 包含的每个文件都变成一个对象 列出其子文件 它包含的文件 和祖先 包含该文件的包含路
  • Apollo 客户端延迟刷新

    In Apollo Client v3React 实现 我使用钩子来使用订阅 当我从订阅接收数据时 我想重新获取查询 但前提是查询之前已执行过并且位于缓存中 有办法实现这一点吗 我首先进行惰性查询 然后在收到订阅数据时手动检查缓存 然后尝试

随机推荐

  • Windows npm 中的 Glob 通配符

    我试图让 npm 在脚本文件夹上构建 browserify 问题是 我在 Windows 上 执行folder js 似乎不起作用 我尝试过全局安装 glob 但每当我运行构建命令时 都会返回错误 提示 找不到模块 c www projec
  • 如何从 Web 服务响应中读取 HTTP 响应标头?

    如何从 C 中的 Web 服务响应中读取 HTTP 响应标头 在深入研究 MSDN 之后 我所需要做的就是覆盖GetWebResponse方法 然后我可以访问响应头 public class MyWSProxy HttpWebClientP
  • 执行多尺度训练(yolov2)

    我想知道多尺度训练如何YOLOv2 https arxiv org pdf 1612 08242 pdf works 论文中指出 原始YOLO使用的输入分辨率为448 448 通过添加锚框 我们将分辨率更改为416 416 然而 由于我们的
  • CodeIgniter:帮助从网页获取元标记的类/库?

    我正在使用代码点火器 我想我使用哪个 php 框架并不重要 但在我编写自己的类之前 已经编写了另一个类 该类允许用户获取任何站点的页面标题和元标记 关键字 描述 如果有的话 任何能够做到这一点的 PHP 类都很棒 谢谢大家 你应该看看这个类
  • 如何设置文本字段字符限制 SwiftUI?

    我正在使用 SwiftUi 版本 2 进行应用程序开发 我遇到了 SwiftUI 中可用文本字段的问题 我不想再使用 UITextField 了 我想限制文本字段中的字符数 我搜索了很多 找到了一些与此相关的答案 但这些答案不适用于 Swi
  • Docker:基础镜像

    我试图理解 Docker 概念 但我无法理解一件事 据我了解 镜像 即容器 可以从不同的 Linux 发行版实例化 例如 Ubuntu CentOS 等 假设我在主机上运行标准 Ubuntu 14 04 What happens if I
  • 卷曲总是返回 false

    下面的代码总是回显 false 我错过了什么吗 url https www google nl ch curl init curl setopt ch CURLOPT URL url curl setopt ch CURLOPT RETUR
  • 找不到如何使用 HttpContent

    我正在尝试使用HttpContent HttpContent myContent HttpContent Create SOME JSON 但我没有找到定义它的 DLL 首先 我尝试添加对Microsoft Http也System Net
  • Scrapy 使用带有规则的 start_requests

    我找不到任何使用 start requests 与规则的解决方案 我也没有在互联网上看到任何关于这两个的示例 我的目的很简单 我想重新定义 start request 函数以获得捕获请求期间所有异常的能力 并在请求中使用元 这是我的蜘蛛的代
  • 结果在同一个文件夹中

    我尝试执行以下命令来对文件夹内找到的数据进行分析 但是 它将它们保存在我执行该行的文件夹中 如何将结果保存在文件所在的文件夹中位于 sed n 14 71p fastqc fastqc txt awk print 1 2 awk sum 2
  • 如何在golang中$push嵌套数组?

    我尝试使用以下方法将一些数据推送到嵌套数组中 push 这是我的 json 文件 id ObjectId 57307906f051147d5317984e user firstName chetan lastName kumar age 2
  • Composer PSR-4 自动加载“找不到类”调试

    是的 另一个关于 找不到类 错误的问题 要么是我遗漏了什么 要么是我误解了 PSR 4 逻辑 我的作曲家库目录结构 扫描仪 gt src gt Test php Test php namespace MyNS class Test 作曲家
  • firebase 的 addValueEventListener() 和 addListenerForSingleValueEvent() 之间的区别

    正如标题所说 我想知道两者之间的区别addValueEventListener and addListenerForSingleValueEvent Firebase 的 addValueEventListener 继续侦听其附加的查询或数
  • 从类定义中省略“private”关键字是否会造成混淆?

    我最近删除了一个private从类定义中指定 因为它位于顶部 紧接在class关键词 class MyClass private int someVariable 我认为这是多余的 一位同事不同意这一点 称这实际上 隐藏 了private数
  • 加载linux内核的基地址

    我对内核如何加载到内存有一些疑问 检查后 proc kallsyms我能够找到内核中各种符号的地址 cat proc kallsyms head n 10 00000000 t vectors start 80008240 T asm do
  • SQL 数据类型 - 如何存储年份?

    我需要在数据库中插入年份 例如 1988 1990 等 当我使用日期或日期时间时 数据类型 它显示错误 我应该使用哪种数据类型 常规的 4 字节 INT 太大了 浪费空间 您没有说明您正在使用什么数据库 因此我无法推荐特定的数据类型 每个人
  • 如何在 d3 力定向图中突出显示(更改颜色)所有连接(邻居)节点和链接

    我在这里看到了这个例子http www d3noob org 2013 03 d3js force directed graph example basic html http www d3noob org 2013 03 d3js for
  • Kotlin 中的驱逐队列

    我需要一个集合 有固定的大小 是可变的 添加新元素后将重新索引元素 删除最旧的元素 如移位寄存器 我觉得番石榴EvictingQueue https guava dev releases 15 0 api docs com google c
  • 有没有办法将色调仅应用于seaborn中PairGrid的下部

    我想知道是否可以将色调仅应用于seaborn的下部PairGrid For example say I have the following figure 对于我需要展示的内容 我想将密度图保留在对角线上 将整体散点图保留在上部 在其上方打
  • 连接 Apollo 和 mongodb

    我想将我的 Apollo 服务器与我的 mongoDB 连接 我知道那里有很多例子 但我陷入了异步部分 没有找到解决方案或示例 这很奇怪 我完全错了吗 我从 next js 的示例开始https github com zeit next j