Firestore Apollo GraphQL 项目教程
1. 项目的目录结构及介绍
firestore-apollo-graphql/
├── src/
│ ├── index.ts
│ ├── datasources/
│ ├── resolvers/
│ ├── schema/
│ ├── types/
├── tests/
├── .gcloudignore
├── .gitignore
├── LICENSE
├── README.md
├── app.yaml
├── package-lock.json
├── package.json
├── tsconfig.json
├── tslint.json
目录结构介绍
- src/: 包含项目的主要源代码。
- index.ts: 项目的入口文件。
- datasources/: 包含与Firestore交互的数据源。
- resolvers/: 包含GraphQL的解析器。
- schema/: 包含GraphQL的模式定义。
- types/: 包含TypeScript的类型定义。
- tests/: 包含项目的测试文件。
- .gcloudignore: 用于Google Cloud的忽略文件。
- .gitignore: 用于Git的忽略文件。
- LICENSE: 项目的许可证文件。
- README.md: 项目的说明文档。
- app.yaml: 用于Google App Engine的配置文件。
- package-lock.json: 锁定依赖版本的文件。
- package.json: 项目的依赖和脚本配置文件。
- tsconfig.json: TypeScript的配置文件。
- tslint.json: TSLint的配置文件。
2. 项目的启动文件介绍
src/index.ts
这是项目的入口文件,负责启动Apollo Server并连接到Firestore。主要功能包括:
- 导入必要的模块和配置。
- 初始化Firestore数据源。
- 定义GraphQL的解析器和模式。
- 启动Apollo Server。
import { ApolloServer } from 'apollo-server';
import { typeDefs } from './schema';
import { resolvers } from './resolvers';
import { FirestoreDataSource } from './datasources';
import admin from 'firebase-admin';
admin.initializeApp({
credential: admin.credential.applicationDefault(),
databaseURL: 'https://<DATABASE_NAME>.firebaseio.com'
});
const server = new ApolloServer({
typeDefs,
resolvers,
dataSources: () => ({
firestoreDataSource: new FirestoreDataSource(admin.firestore())
})
});
server.listen().then(({ url }) => {
console.log(`🚀 Server ready at ${url}`);
});
3. 项目的配置文件介绍
app.yaml
这是用于Google App Engine的配置文件,定义了应用的运行环境和资源配置。
runtime: nodejs14
env_variables:
FIRESTORE_PROJECT_ID: <YOUR_PROJECT_ID>
FIRESTORE_PRIVATE_KEY: <YOUR_PRIVATE_KEY>
FIRESTORE_CLIENT_EMAIL: <YOUR_CLIENT_EMAIL>
package.json
这是项目的依赖和脚本配置文件,定义了项目所需的npm包和一些脚本命令。
{
"name": "firestore-apollo-graphql",
"version": "1.0.0",
"main": "src/index.ts",
"scripts": {
"start": "ts-node src/index.ts",
"build": "tsc",
"test": "mocha -r ts-node/register tests/**/*.test.ts"
},
"dependencies": {
"apollo-server": "^3.0.0",
"firebase-admin": "^9.0.0",
"graphql": "^15.0.0"
},
"devDependencies": {
"ts-node": "^10.0.0",
"typescript": "^4.0.0",
"mocha": "^8.0.0",
"tslint": "^6.0.0"
}
}
tsconfig.json
这是TypeScript的配置文件,定义了TypeScript编译器的选项。
{
"compilerOptions": {
"