Feathers-Apollo 项目教程
1. 项目的目录结构及介绍
feathers-apollo/
├── config/
│ ├── default.json
│ └── production.json
├── src/
│ ├── index.js
│ ├── services/
│ │ └── my-service/
│ │ ├── my-service.class.js
│ │ ├── my-service.hooks.js
│ │ └── my-service.schema.js
│ └── graphql/
│ ├── schema.js
│ └── resolvers.js
├── package.json
└── README.md
目录结构介绍
config/
: 包含项目的配置文件,如default.json
和production.json
。src/
: 项目的源代码目录。index.js
: 项目的启动文件。services/
: 包含各个服务的实现文件。my-service/
: 一个示例服务目录,包含服务的类定义、钩子函数和模式定义。
graphql/
: 包含 GraphQL 的 schema 和 resolvers。
package.json
: 项目的依赖和脚本配置文件。README.md
: 项目的说明文档。
2. 项目的启动文件介绍
src/index.js
const feathers = require('@feathersjs/feathers');
const express = require('@feathersjs/express');
const socketio = require('@feathersjs/socketio');
const ApolloServer = require('apollo-server-express').ApolloServer;
const typeDefs = require('./graphql/schema');
const resolvers = require('./graphql/resolvers');
const app = express(feathers());
// 解析 JSON 请求体
app.use(express.json());
// 解析 URL 编码的请求体
app.use(express.urlencoded({ extended: true }));
// 启用 REST 服务
app.configure(express.rest());
// 启用 Socket.io 服务
app.configure(socketio());
// 创建 Apollo Server 实例
const apolloServer = new ApolloServer({
typeDefs,
resolvers,
context: ({ req }) => ({ headers: req.headers })
});
// 将 Apollo Server 集成到 Express 应用中
apolloServer.applyMiddleware({ app });
// 启动应用
const PORT = process.env.PORT || 3030;
app.listen(PORT, () => {
console.log(`Feathers app started on http://localhost:${PORT}`);
});
启动文件介绍
- 引入必要的模块:
@feathersjs/feathers
,@feathersjs/express
,@feathersjs/socketio
,apollo-server-express
。 - 创建 Feathers 应用实例。
- 配置 JSON 和 URL 编码的请求体解析。
- 启用 REST 和 Socket.io 服务。
- 创建 Apollo Server 实例,并将其集成到 Feathers 应用中。
- 启动应用并监听指定端口。
3. 项目的配置文件介绍
config/default.json
{
"port": 3030,
"host": "localhost",
"public": "../public/",
"paginate": {
"default": 10,
"max": 50
}
}
config/production.json
{
"port": 8080,
"host": "0.0.0.0",
"paginate": {
"default": 20,
"max": 100
}
}
配置文件介绍
default.json
: 默认配置文件,包含端口、主机、静态文件目录和分页配置。production.json
: 生产环境配置文件,覆盖默认配置,如端口和分页配置。
这些配置文件可以通过 app.get('配置项')
在应用中访问。例如,app.get('port')
可以获取当前配置的端口号。