GraphQL Gateway Apollo Express 项目教程
1. 项目的目录结构及介绍
graphql-gateway-apollo-express/
├── vscode/
│ └── settings.json
├── graphql-documents/
│ └── queries.graphql
├── secrets/
│ └── example.env
├── server/
│ ├── index.ts
│ ├── schema.ts
│ └── resolvers.ts
├── tests/
│ └── server.test.ts
├── .editorconfig
├── .eslintignore
├── .eslintrc
├── .gitignore
├── .graphqlrc
├── .prettierrc
├── LICENSE
├── README.md
├── nodemon.json
├── package.json
├── package-lock.json
└── tsconfig.json
vscode/
: VSCode 配置文件夹。graphql-documents/
: 存放 GraphQL 查询文档。secrets/
: 存放敏感信息,如环境变量文件。server/
: 服务器核心代码,包括入口文件、Schema 定义和解析器。tests/
: 测试文件夹,包含服务器测试代码。.editorconfig
,.eslintignore
,.eslintrc
,.gitignore
,.graphqlrc
,.prettierrc
: 各种配置文件。LICENSE
: 项目许可证。README.md
: 项目说明文档。nodemon.json
: Nodemon 配置文件。package.json
,package-lock.json
: Node.js 项目依赖管理文件。tsconfig.json
: TypeScript 配置文件。
2. 项目的启动文件介绍
项目的启动文件位于 server/index.ts
。该文件主要负责以下任务:
- 导入必要的模块和配置。
- 初始化 Apollo Server。
- 配置 Express 服务器。
- 启动服务器并监听指定端口。
// server/index.ts
import { ApolloServer } from 'apollo-server-express';
import express from 'express';
import { schema } from './schema';
const app = express();
const server = new ApolloServer({
schema,
playground: true,
});
server.applyMiddleware({ app });
app.listen({ port: 8000 }, () => {
console.log(`🚀 Server ready at http://localhost:8000${server.graphqlPath}`);
});
3. 项目的配置文件介绍
package.json
package.json
文件定义了项目的元数据和依赖项。以下是一些关键部分:
{
"name": "graphql-gateway-apollo-express",
"version": "1.0.0",
"scripts": {
"dev": "nodemon --exec ts-node server/index.ts"
},
"dependencies": {
"apollo-server-express": "^2.19.0",
"express": "^4.17.1",
"graphql": "^15.4.0",
"typescript": "^4.1.3"
},
"devDependencies": {
"ts-node": "^9.1.1",
"nodemon": "^2.0.6"
}
}
scripts
: 定义了开发环境启动命令npm run dev
。dependencies
: 生产环境依赖项。devDependencies
: 开发环境依赖项。
tsconfig.json
tsconfig.json
文件定义了 TypeScript 编译选项。
{
"compilerOptions": {
"target": "ES6",
"module": "commonjs",
"outDir": "./dist",
"strict": true,
"esModuleInterop": true
},
"include": ["server/**/*"]
}
compilerOptions
: 编译选项,如目标 ECMAScript 版本、模块系统等。include
: 指定编译的文件范围。
nodemon.json
nodemon.json
文件定义了 Nodemon 的配置,用于自动重启服务器。
{
"exec": "ts-node server/index.ts",
"watch": ["server/**