GraphQL入门之使用ApolloServer和express构建GraphQL服务

news/2024/5/30 18:11:35/文章来源:https://blog.csdn.net/kongxx/article/details/136677107

接上一篇文章,由于 express 现在仍然是主流的 Node.js 服务端框架,所以今天看看 ApolloServer 怎样和 express 集成构建 GraphQL 服务。另外今天文章也顺便讲一下怎么使用 typescript 来实现。

初始化项目

mkdir myapp
cd myapp
npm init (一路回车)

安装依赖包

npm install @apollo/server graphql express cors body-parser nodemon
npm install --save-dev typescript @types/cors @types/express @types/body-parser ts-node

这里安装了包括 graphql,apollo,express 和 typescript 相关的依赖包。

生成 tsconfig.json 文件

npx tsc --init

命令运行后,会生成 tsconfig.json 文件,我们添加一下 “outDir”: “./dist”, 修改后内容如下:

{"compilerOptions": {"target": "es2016","module": "commonjs","outDir": "./dist","esModuleInterop": true,"forceConsistentCasingInFileNames": true,"strict": true,"skipLibCheck": true}
}

修改 package.json 文件

主要修改

"main": "dist/server.js",

"scripts": {"build": "npx tsc","start": "node dist/server.js","dev": "nodemon src/server.ts"},

修改后的package.json文件如下

{"name": "apollo-express","version": "1.0.0","description": "","main": "dist/server.js","scripts": {"build": "npx tsc","start": "node dist/server.js","dev": "nodemon src/server.ts"},"author": "","license": "ISC","dependencies": {"@apollo/server": "^4.10.1","body-parser": "^1.20.2","cors": "^2.8.5","express": "^4.18.3","graphql": "^16.8.1","nodemon": "^3.1.0"},"devDependencies": {"@types/body-parser": "^1.19.5","@types/cors": "^2.8.17","@types/express": "^4.17.21","ts-node": "^10.9.2","typescript": "^5.4.2"}
}

服务主程序

创建 src/server.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 bodyParser from 'body-parser';// 定义GraphQL的schema
const typeDefs = `#graphqltype Query {hello: String}
`;// 定义GraphQL的解析器
const resolvers = {Query: {hello: () => 'Hello World!',},
};const app = express();
const httpServer = http.createServer(app);// 使用schema和resolver创建ApolloServer
const server = new ApolloServer({typeDefs,resolvers,plugins: [ApolloServerPluginDrainHttpServer({ httpServer })],
});// 启动ApolloServer
server.start().then(() => {app.use(cors(),bodyParser.json(),expressMiddleware(server),);new Promise((resolve: any) => {httpServer.listen({ port: 4000 }, resolve)}).then(() => {console.log(`🚀 Server ready at http://localhost:4000`);});
});

测试

启动服务

npm run dev

访问 http://localhost:4000 进行测试,输入查询

query {hello
}

执行查询结果

{"data": {"hello": "Hello World!"}
}

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

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

相关文章

从零开始学习深度学习库-1:前馈网络

你好!欢迎来到这个系列的第一篇文章,我们将尝试用Python构建自己的深度学习库。在这篇文章中,我们将开始编写一个简单的前馈神经网络。我们将仅在这篇文章中处理前向传播,并在下一篇文章中处理网络的训练。这篇文章将介绍基本的前…

数字逻辑-时序逻辑电路一

一、实验目的 (1)熟悉触发器的逻辑功能及特性。 (2)掌握集成D和JK触发器的应用。 (3)掌握时序逻辑电路的分析和设计方法。 二、实验仪器及材料 三、实验内容及步骤 1、用D触发器(74LS74&am…

SpringCloud Gateway 新一代网关

一、前言 接下来是开展一系列的 SpringCloud 的学习之旅,从传统的模块之间调用,一步步的升级为 SpringCloud 模块之间的调用,此篇文章为第六篇,即介绍 Gateway 新一代网关。 二、概述 2.1 Gateway 是什么 Gateway 是在 Spring 生…

分享 | 计算机组成与设计学习资料+CPU设计源码+实验报告

1.引言 百度网盘资源链接: 链接:https://pan.baidu.com/s/1Ww6u_l1L6DMXofC2HxfETw?pwdyqd6 提取码:yqd6 2.学习资源预览 2.1 包含学习手册四本: - 计算机原理与设计:Verilog HDL版 - 计算机组成与设…

macOS、Windows、Linux、Docker等各个平台通过ollama一键部署谷歌最新开源的gemma大模型,免费开源离线部署使用超越llama2、chatgpt4

macOS、Windows、Linux、Docker等各个平台通过ollama一键部署谷歌最新开源的gemma大模型,免费开源离线部署使用超越chatgpt4。谷歌最强开源大模型亮相!Gemini技术下放,笔记本就能跑,可商用。 谷歌12天连放三个大招 9日-宣布其最强…

Windows Server 各版本搭建 Web 服务器实现访问本地 Web 网站(03~19)

一、Windows Server 2003 点击左下角开始➡管理工具➡管理您的服务器,点击添加或删除角色 点击下一步 选择自定义,点击下一步 选择应用程序服务器,点击下一步 不勾选,点击下一步 这里提示插入磁盘,咱们提前下载好 IIS…

提升运营效率,探索运营中台架构的力量

随着数字化转型的加速推进,企业需要更高效地管理和运营各项业务,而运营中台架构作为一种新型的业务架构设计理念,正在逐渐受到关注和应用。本篇博客将深入探讨运营中台架构的概念、优势和实践,帮助企业了解如何通过构建运营中台实…

ArmSoM Rockchip系列产品 通用教程 之 RTC 使用

1. RTC 简介​ RTC:(Real_Time Clock):实时时钟 HYM8563是一种低功耗实时时钟(RTC)芯片,用于提供精确的时间和日期信息。它提供一个可编程的时钟输出,一个中断输出和一个掉电检测器,所有的地址…

YOLOv8独家改进:backbone改进 | TransXNet:聚合全局和局部信息的全新CNN-Transformer视觉主干| CVPR2024

💡💡💡本文独家改进:CVPR2024 TransXNet助力检测,代替YOLOv8 Backbone 改进结构图如下: 收录 YOLOv8原创自研 https://blog.csdn.net/m0_63774211/category_12511737.html?spm=1001.2014.3001.5482 💡💡💡全网独家首发创新(原创),适合paper !!! 💡…

Python代码操作PPT:PowerPoint演示文稿的合并与拆分

多个PowerPoint演示文稿的处理可能会成为非常麻烦的工作。有时需要将多个演示文稿合并为一个演示文稿,从而不用在演示时重复打开演示文稿;有时又需要将单个演示文稿拆分为多个演示文稿,用于其他目的或进行分发。手动进行这些操作会非常麻烦&a…

【STA】鲁棒性时序检查

片上变化 由于工艺差异,芯片上不同部分的相同MOS晶体管可能没有相似的特性。同一芯片的两个区域可能不在相同的PVT条件下。上述的PVT变化被称为片上变化(OCV),这些变化会影响芯片不同部分的走线延迟和单元延迟,而是要对…

Linux下的编辑器——Vim

vi/vim 的区别简单点来说,它们都是多模式编辑器,不同的是 vim 是 vi 的升级版本,它不仅兼容 vi 的所有指令,而且还有一些新的特性在里面。例如语法加亮,可视化操作不仅可以在终端运行,也可以运行于x window…

FreeRTOS操作系统学习——中断管理

中断管理介绍 嵌入式实时系统需要对整个系统环境产生的事件作出反应。这些事件对处理时间和响应时间都有不同的要求。事件通常采用中断方式检测,中断服务例程(ISR)中的处理量应当越短越好。ISR是在内核中被调用的, ISR执行过程中,用户的任务…

idea配置本地启用scope No ExecutorFactory found to execute the application

参考&#xff1a;https://www.cnblogs.com/jia-tong/p/16615412.html 当pom中带有&#xff1a; <scope>provided</scope> 时就会报错&#xff1a;Exception in thread “main” java.lang.IllegalStateException: No ExecutorFactory found to execute the applica…

YOLOv8改进 | 图像去雾 | 特征融合注意网络FFA-Net增强YOLOv8对于模糊图片检测能力(北大和北航联合提出)

一、本文介绍 本文给大家带来的改进机制是由北大和北航联合提出的FFA-net: Feature Fusion Attention Network for Single Image Dehazing图像增强去雾网络,该网络的主要思想是利用特征融合注意力网络(Feature Fusion Attention Network)直接恢复无雾图像,FFA-Net通过特征…

大模型高级 RAG 检索策略之句子窗口检索

之前介绍过大语言模型&#xff08;LLM&#xff09;相关技术 RAG&#xff08;Retrieval Augmented Generation&#xff09;的内容&#xff0c;但随着 LLM 技术的发展&#xff0c;越来越多的高级 RAG 检索方法也随之被人发现&#xff0c;相对于普通的 RAG 检索&#xff0c;高级 R…

使用CrossOver 在Mac 运行Windows 软件|D3DMetal是什么技术,

CrossOver Mac 使用特点 • 免费试用 14 天&#xff0c;可使用 CrossOver Mac 全部功能&#xff0c;• 试用过期会保留之前安装的 Windows 软件• 使 Mac 运行 Windows 程序 使用CrossOver在Mac上运行Windows软件是一个方便且无需安装完整Windows操作系统的解决方案。CrossOve…

使用Docker在windows上安装IBM MQ

第一步、安装wsl 详见我另一篇安装wsl文章。 第二步、安装centos 这里推荐两种方式&#xff0c;一种是从微软商城安装&#xff0c;一种是使用提前准备好的镜像安装&#xff0c;详见我另一篇windos下安装centos教程。 第三步、安装windows下的Docker desktop 详见我另一篇wind…

【WSN覆盖优化】基于改进黏菌算法的无线传感器网络覆盖 WSN覆盖优化【Matlab代码#65】

文章目录 【可更换其他算法&#xff0c;获取资源请见文章第5节&#xff1a;资源获取】1. 改进SMA算法1.1 改进参数p1.2 混沌精英突变策略 2. WSN节点感知模型3. 部分代码展示4. 仿真结果展示5. 资源获取 【可更换其他算法&#xff0c;获取资源请见文章第5节&#xff1a;资源获取…

Linux网络套接字之预备知识

(&#xff61;&#xff65;∀&#xff65;)&#xff89;&#xff9e;嗨&#xff01;你好这里是ky233的主页&#xff1a;这里是ky233的主页&#xff0c;欢迎光临~https://blog.csdn.net/ky233?typeblog 点个关注不迷路⌯▾⌯ 目录 一、预备知识 1.理解源IP地址和目的IP地址 …