GraphQL 错误处理项目教程
1. 项目的目录结构及介绍
graphql-errors/
├── README.md
├── package.json
├── src/
│ ├── config/
│ │ └── config.js
│ ├── errors/
│ │ ├── customErrors.js
│ │ └── errorHandler.js
│ ├── schema/
│ │ ├── index.js
│ │ ├── mutations/
│ │ └── queries/
│ ├── server.js
│ └── utils/
│ └── logger.js
└── test/
└── errorHandling.test.js
- README.md: 项目说明文档。
- package.json: 项目依赖和脚本配置。
- src/: 源代码目录。
- config/: 配置文件目录。
- config.js: 主配置文件。
- errors/: 错误处理相关文件。
- customErrors.js: 自定义错误类。
- errorHandler.js: 错误处理中间件。
- schema/: GraphQL 模式定义。
- index.js: 模式入口文件。
- mutations/: 变更定义。
- queries/: 查询定义。
- server.js: 服务器启动文件。
- utils/: 工具函数。
- logger.js: 日志工具。
- config/: 配置文件目录。
- test/: 测试目录。
- errorHandling.test.js: 错误处理测试文件。
2. 项目的启动文件介绍
src/server.js 是项目的启动文件,负责初始化服务器并启动应用。以下是该文件的主要内容:
const express = require('express');
const { ApolloServer } = require('apollo-server-express');
const typeDefs = require('./schema');
const resolvers = require('./resolvers');
const errorHandler = require('./errors/errorHandler');
const config = require('./config/config');
async function startServer() {
const app = express();
const server = new ApolloServer({
typeDefs,
resolvers,
formatError: errorHandler,
});
await server.start();
server.applyMiddleware({ app });
app.listen({ port: config.port }, () => {
console.log(`Server ready at http://localhost:${config.port}${server.graphqlPath}`);
});
}
startServer();
- express: 引入 Express 框架。
- ApolloServer: 引入 Apollo Server 用于 GraphQL 服务。
- typeDefs: GraphQL 类型定义。
- resolvers: 解析器定义。
- errorHandler: 错误处理中间件。
- config: 配置文件。
3. 项目的配置文件介绍
src/config/config.js 是项目的配置文件,包含应用的基本配置信息。以下是该文件的主要内容:
module.exports = {
port: process.env.PORT || 4000,
logLevel: process.env.LOG_LEVEL || 'info',
database: {
uri: process.env.DATABASE_URI || 'mongodb://localhost:27017/graphql-errors',
},
};
- port: 服务器监听端口。
- logLevel: 日志级别。
- database: 数据库连接 URI。
这些配置可以通过环境变量进行覆盖,以适应不同的部署环境。