apollo/server express,mongoose,resolver chains

apollo/server Get started with Apollo Server - Apollo GraphQL Docs

mongoose Mongoose 5.0 中文文档

index2.ts

import { ApolloServer } from '@apollo/server';
import { expressMiddleware } from '@apollo/server/express4';
import { ApolloServerPluginDrainHttpServer } from '@apollo/server/plugin/drainHttpServer';
import express from 'express';
import http from 'http';
import cors from 'cors';
import { typeDefs, resolvers } from './index2-schema';
import { users } from "./index2-mongoose";

const app = express();

const httpServer = http.createServer(app);

const server = new ApolloServer<{ token?: String }>({
  typeDefs,
  resolvers,
  plugins: [ApolloServerPluginDrainHttpServer({ httpServer })],
});

server.start().then(() => {
  app.use(
    '/graphql',
    cors<cors.CorsRequest>(),
    express.json(),
    expressMiddleware(server, {
      context: async ({ req }) => ({
        token: req.headers.token,
        msg: "会传递到所有的resolver context参数中",
        dataSources: { users }
      }),
    }),
  );

  httpServer.listen(4000, () => {
    console.log(`🚀 Server ready at http://localhost:4000/graphql`);
  });
});

index2-schema.ts

import { users } from "./index2-mongoose";

export let typeDefs = `#graphql
  #1
  type Event {
    name: String!
    date: String!
    location: Location
  }
  
  type Location {
    name: String!
    weather: WeatherInfo
  }
  
  type WeatherInfo {
    temperature: Float
    description: String
  }

  #2
  type Library {
    branch: String!
    books: [Book]
  }

  type Book {
    title: String
    author: Author
  }

  type Author {
    name: String!
  }

  #3
  type User{
    _id: ID!
    name: String!
    age: Int!
    sex: String!
  }

  type Query {
    books: [Book]
    users: [User]
    user(id: ID!): User
    upcomingEvents: [Event!]!
    libraries: [Library]
    Library: Library
  }
`;

export const resolvers = {
  Query: {
    books() {
      return [
        { id: '1', title: "t1", },
        { id: '2', title: "t2", },
      ]
    },
    async users(parent: any, args: any, context: { dataSources: { users: { find: () => any; }; }; }) {
      let value = await users.find();
      console.log(await context.dataSources.users.find());
      return value;
    },
    async user(parent: any, { id }: any, context: { dataSources: { users: { findById: (arg0: any) => any; }; }; }) {
      console.log(await context.dataSources.users.findById(id));
      const user = await users.findById(id)
      return user;
    },
    upcomingEvents() {
      return [
        {
          name: "01",
          date: "2024-1-1",
          location: {
            name: "sunday",
            weather: {
              temperature: 18.5,
              description: 'cold'
            }
          }
        }
      ];
    },
    libraries() {
      return [
        { id: "1", branch: 'downtown' },
        { id: "2", branch: 'riverside' },
      ];
    }
  },
  Library: {
    books(parent: any) {
      // parent上一步libraries解析的结果
      console.log('books parent =', parent);
      let books = [
        { id: '1', belongto: "1", title: "t1", },
        { id: '2', belongto: "1", title: "t2", },
        { id: '3', belongto: "1", title: "t2", },
        { id: '4', belongto: "2", title: "t2", },
        { id: '5', belongto: "2", title: "t2", },
      ]
      return books.filter(item => item.belongto === parent.id);
    }
  },
  Book: {
    author(parent: any, args: any, context: any, info: any) {
      // 上一步books的解析结果
      console.log(parent);
      console.log(context);
      let authors = [
        { id: '1', bid: '1', name: "Tom" },
        { id: '2', bid: '2', name: "Sam" },
        { id: '3', bid: '3', name: "Jack" },
        { id: '4', bid: '4', name: "Lucy" },
        { id: '5', bid: '5', name: "David" },
      ]
      return authors.find(item => item.bid === parent.id);
    }
  }
};

/*
// 查询案例
query ExampleQuery {
  books {
    title
    author{
      name
    }
  }
  user(id: "63ca47df3dd42947e4cc021b") {
    _id
    name
    age
  }
  upcomingEvents{
    name
  }
  libraries {
    branch
    books{
      title
      author {
        name
      }
    }
  }
}
*/

index2-mongoose.ts 

import mongoose, { Mongoose } from 'mongoose';

mongoose.set("strictQuery", true);

mongoose.connect('mongodb://localhost:27017/test');

export var db = mongoose.connection;

db.on('error', console.error.bind(console, 'connection error:'));

db.once('open', function () {
  console.log('mongodb connection success!');
});


function UserModel(mongoose: Mongoose) {
  let user = new mongoose.Schema({
    name: { type: String, required: true },

    password: { type: String, required: true },

    age: { type: Number, require: true },

    sex: { type: String, require: true },

    phone: { type: String, require: true },

    email: { type: String, required: true },

    image: { type: String, default: null },

    myChannel: { type: String, default: null },

    describle: { type: String, default: null },

    subscribeCount: { type: Number, default: 0 },
  });

  return mongoose.model("User", user);
}

export const users = UserModel(mongoose);

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/584934.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

使用 Docker 自建一款怀旧游戏之 - 扫雷

1&#xff09;扫雷 简介 扫雷 是一种经典的单人电脑游戏&#xff0c;最初由微软公司在 1990 年代开发并内置在 Windows 操作系统中。游戏的目标是在一个由方块组成的网格上揭开所有非地雷的方块&#xff0c;而不触发地雷。每个方块上都标有数字&#xff0c;表示周围 8 个方块中…

LeetCode55:跳跃游戏

题目描述 给你一个非负整数数组 nums &#xff0c;你最初位于数组的 第一个下标 。数组中的每个元素代表你在该位置可以跳跃的最大长度。 判断你是否能够到达最后一个下标&#xff0c;如果可以&#xff0c;返回 true &#xff1b;否则&#xff0c;返回 false 。 解题思想 每次…

深入OceanBase分布式数据库:MySQL 模式下的 SQL 基本操作

码到三十五 &#xff1a; 个人主页 OceanBase与MySQL模式下兼容性序 在当今的大数据时代&#xff0c;数据库技术的选择对于企业的信息化发展至关重要。OceanBase作为一种高性能、高可用的分布式关系数据库&#xff0c;在与MySQL模式的兼容性方面展现出了显著的优势&#xff0c…

java语言开发的商城系统有哪些?

最近&#xff0c;有小伙伴问我有没有靠谱的java商城系统&#xff0c;经过我一顿扒拉&#xff0c;终于给大家整理出来了。 目前java语言开发的商城系统主要有shop、javashop、ejavashop、yuanfeng、mall4j、lilishop等。在没有深入了解这些系统前&#xff0c;我们可以从产品推出…

面包屑-文件夹

1.需求&#xff1a; 类似于 百度网盘、阿里云盘的 云文件夹管理功能 2.问题点 1.页面刷新 导致面包屑子级未持久化 2.浏览器的 前进、后退 &#xff1b;面包屑未能 跳转到指定 子级 3.数据不同步问题 3.解决方法 1.后端提供 根据 id 查询面包屑 text 的 api【这里并没有…

【已解决】如何打开ZIP格式的压缩文件?

压缩文件格式的种类比较多&#xff0c;ZIP是最常见的压缩格式之一。那收到ZIP压缩文件&#xff0c;要如何打开呢&#xff1f;不清楚的小伙伴一起来看看吧&#xff01; 方法一&#xff1a;使用系统自带的解压缩功能 很多电脑操作系统都内置了解压缩功能&#xff0c;并且支持大…

Matlab|含sop的33节点配电网优化

目录 1 主要内容 2 部分代码 3 程序结果 4 下载链接 1 主要内容 程序以IEEE33节点为例&#xff0c;分析含sop的配电网优化&#xff0c;包括sop有功约束、无功约束和容量约束&#xff0c;非线性部分通过转换为旋转锥约束进行编程&#xff0c;并且包括33节点配电网潮流及对应…

微信小程序个人中心、我的界面(示例四)

微信小程序个人中心、我的界面&#xff0c;九宫格简单布局&#xff08;示例四&#xff09; 微信小程序个人中心、我的界面&#xff0c;超简洁的九宫格界面布局&#xff0c;代码粘贴即用。更多微信小程序界面示例&#xff0c;请进入我的主页哦&#xff01; 1、js代码 Page({…

《深入解析WIndows操作系统》第9章读书笔记

1、闪存类型&#xff1a;常见的闪存类型有NOR和NAND。NOR闪存在操作上最接近RAM&#xff0c;它的每个字节都可以被独立地寻址&#xff0c;而NAND闪存则被组织成以块为单位&#xff0c;就像磁盘一样。NOR类型的闪存用来设计保存计算机主板上的BIOS&#xff0c;而NAND类型的闪存被…

【哈希】Leetcode 217. 存在重复元素

题目讲解 217. 存在重复元素 算法讲解 使用set集合完成元素的存储&#xff0c;当我们将当前元素插入到集合单中&#xff0c;如果insert的返回值的pair.second等于false说明当前元素已经存在&#xff0c;反之元素在集合中存在 class Solution { public:bool containsDuplica…

【触摸案例-手势解锁案例-九宫格 Objective-C语言】

一、手势解锁案例,九宫格,我们先来分析一下怎么实现: 首先呢,我们先来运行一下, 这一块儿,上面的这九个东西,肯定是要有一个九宫格的一个算法的问题,然后呢,上边的这九个小圆圈儿,这是什么东西,Button,为什么是Button,因为可以点,是吗,就因为这个?实际上,你用…

UE5像素流部署以及多实例部署(兼容ue4)

像素流部署请看我之前的文章就行&#xff0c;今天讲的是多实例部署 在这里可以配置多实例的数量 如果设置800端口 设置两个实例 那么就是800 801端口 我的个人显卡是4060TI,最多开三个

kaggle之皮肤癌数据的深度学习测试

kaggle之皮肤癌数据的深度学习测试 近期一直在肝深度学习 很久之前&#xff0c;曾经上手搞过一段时间的深度学习&#xff0c;似乎是做轮胎花纹的识别&#xff0c;当初用的是TensorFlow&#xff0c;CPU版本的&#xff0c;但已经很长时间都没弄过了 现在因为各种原因&#xff…

【论文阅读】ELAN-Efficient Long-Range Attention Network for Image Super-resolution

ELAN-Efficient Long-Range Attention Network for Image Super-resolution 论文地址简介1 引言2相关工作2.1 基于 CNN 的 SR 方法2.2 基于 Transformer 的 SR 方法 3 方法论3.1 ELAN 的整体流程3.2 Efficient Long-range Attention Block (ELAB) 4实验4.1实验设置4.2 与轻量级…

Gray Zone Warfare灰区战争无法启动、登不上、加载失败解决办法

《灰区战争》是由捷克独立工作室开发、虚幻5引擎打造的开放世界FPS游戏&#xff0c;现已上线Steam页面&#xff0c;游戏将于2024年推出&#xff0c;暂不支持中文。当行动者 在对手做出反应之前迅速取得小规模胜利时&#xff0c;就出现了既成事实。例如&#xff1a;没收有争议的…

如何利用AI智能名片B2B2C商城系统将关键客户转化为数据驱动的会员

在数字化浪潮席卷全球的今天&#xff0c;数据无疑是企业发展的核心驱动力。然而&#xff0c;如何将这些无形的数字转化为企业实际增长的动力&#xff0c;却是许多企业面临的难题。特别是对于关键客户的管理&#xff0c;如何深入挖掘他们的价值&#xff0c;并转化为企业的忠实会…

【论文笔记】Training language models to follow instructions with human feedback A部分

Training language models to follow instructions with human feedback A 部分 回顾一下第一代 GPT-1 &#xff1a; 设计思路是 “海量无标记文本进行无监督预训练少量有标签文本有监督微调” 范式&#xff1b;模型架构是基于 Transformer 的叠加解码器&#xff08;掩码自注意…

力扣:61. 旋转链表(Java,双指针)

目录 题目描述&#xff1a;输入&#xff1a;输出&#xff1a;代码描述&#xff1a; 题目描述&#xff1a; 给你一个链表的头节点 head &#xff0c;旋转链表&#xff0c;将链表每个节点向右移动 k 个位置。 输入&#xff1a; head [1,2,3,4,5], k 2 输出&#xff1a; [4,5,1,…

Java项目:基于SSM框架实现的视康眼镜网店销售管理系统眼镜商城(ssm+B/S架构+源码+数据库+毕业论文+PPT)

一、项目简介 本项目是一套基于SSM框架实现的视康眼镜网店销售管理系统 包含&#xff1a;项目源码、数据库脚本等&#xff0c;该项目附带全部源码可作为毕设使用。 项目都经过严格调试&#xff0c;eclipse或者idea 确保可以运行&#xff01; 该系统功能完善、界面美观、操作简…

Android4.4真机移植过程笔记(三)

如果文章字体看得不是很清楚&#xff0c;大家可以下载pdf文档查看&#xff0c;文档已上传&#xff5e;oo&#xff5e; 7、安装加密APK 需要修改文件如下&#xff1a; 相对Android4.2改动还是蛮大的&#xff0c;有些文件连路径都变了: //Android4.2 1、frameworks/native/libs…
最新文章