https://github.com/puti94/graphql-adapter
一个基于 sequelize ORM框架自动生成 graphql schema 的库
https://github.com/puti94/graphql-adapter
graphql sequelize typescript
Last synced: about 2 months ago
JSON representation
一个基于 sequelize ORM框架自动生成 graphql schema 的库
- Host: GitHub
- URL: https://github.com/puti94/graphql-adapter
- Owner: puti94
- License: mit
- Created: 2020-05-16T08:28:15.000Z (about 5 years ago)
- Default Branch: master
- Last Pushed: 2020-07-27T13:59:31.000Z (almost 5 years ago)
- Last Synced: 2025-03-25T11:21:22.794Z (2 months ago)
- Topics: graphql, sequelize, typescript
- Language: TypeScript
- Size: 1.22 MB
- Stars: 3
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# graphql-adapter
# graphql schema 自动生成器## 安装
```bash
$ yarn add graphql-adapter // or npm i graphql-adapter --save
```## 原理
根据`orm`([sequelize](https://github.com/sequelize/sequelize))框架自动解析框架`model`的属性,添加基于`model`crud的graphql接口
## 简单用法
```js
const http = require("http");
const {ApolloServer, PubSub} = require("apollo-server-express");
const express = require("express");
const {generateSchema} = require("../dist");
const {Sequelize, DataTypes} = require("sequelize");
const sequelize = new Sequelize({dialect: "mysql"});
const models = {
user: sequelize.define("user", {name: DataTypes.STRING})
};
const server = new ApolloServer({
schema: generateSchema(models, {pubSub: new PubSub()}),
});
const app = express();
server.applyMiddleware({app});
const httpServer = http.createServer(app);
server.installSubscriptionHandlers(httpServer);
const PORT = 8082;
httpServer.listen(PORT, () => {
console.log(`🚀 Server ready at http://localhost:${PORT}${server.graphqlPath}`);
console.log(`🚀 Subscriptions ready at ws://localhost:${PORT}${server.subscriptionsPath}`);
});```
## 高级用法
```js
const http = require("http");
const {ApolloServer, PubSub} = require("apollo-server-express");
const express = require("express");
const {generateSchema} = require("../dist");
const {sequelize, models} = require("./db");
sequelize.sync();
const server = new ApolloServer({
schema: generateSchema(models, {
pubSub: new PubSub(),
handlerFindOptions: ((action, options, fields) => {
console.log("action", action, options, fields);
return options;
}),
handlerAggregateOptions: ((action, options) => {
console.log("action", action, options);
return options;
}),
filterSubscription: (response) => {
console.log("Subscription", response);
return true;
},
created: {
filter: (response) => {
console.log("created.filter", response);
return true;
}
},
configMap: {
User: {
created: {
filter: (response) => {
console.log("User.created.filter", response);
return true;
}
},
}
}
}),
tracing: true,
});
const app = express();
server.applyMiddleware({app});
const httpServer = http.createServer(app);
server.installSubscriptionHandlers(httpServer);
const PORT = 8082;
httpServer.listen(PORT, () => {
console.log(`🚀 Server ready at http://localhost:${PORT}${server.graphqlPath}`);
console.log(`🚀 Subscriptions ready at ws://localhost:${PORT}${server.subscriptionsPath}`);
});```
## 实现接口
### query(查询)
- one(查找单个)
- list(查找列表)
- listPage(查找列表带总量)
- aggregation(聚合接口 min | max | sum | count)
### mutation(异变)
- create(新建)
- remove(删除)
- update(更新)
### subscription(监听)
- created(新建事件)
- removed(删除事件)
- updated(更新事件)
## 参考项目
- [graphql-sequelize](https://github.com/mickhansen/graphql-sequelize)
- [graphql-sequelize-generator](https://github.com/teamstarter/graphql-sequelize-generator)