-
Notifications
You must be signed in to change notification settings - Fork 171
/
Copy pathjsonGraphqlExpress.ts
65 lines (61 loc) · 1.5 KB
/
jsonGraphqlExpress.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
import { createHandler } from 'graphql-http/lib/use/express';
import schemaBuilder from './schemaBuilder';
import { graphiqlHandler } from './graphiqlHandler';
import type { Data } from './types';
import type { Handler } from 'express';
/**
* An express middleware for a GraphQL endpoint serving data from the supplied json.
*
* @param {any} data
* @returns An array of middlewares
*
* @example
* import express from 'express';
* import jsonGraphqlExpress from 'json-graphql-server';
*
* const data = {
* "posts": [
* {
* "id": 1,
* "title": "Lorem Ipsum",
* "views": 254,
* "user_id": 123,
* },
* {
* "id": 2,
* "title": "Sic Dolor amet",
* "views": 65,
* "user_id": 456,
* },
* ],
* "users": [
* {
* "id": 123,
* "name": "John Doe"
* },
* {
* "id": 456,
* "name": "Jane Doe"
* }
* ],
* };
*
* const PORT = 3000;
* var app = express();
*
* app.use('/graphql', jsonGraphqlExpress(data));
*
* app.listen(PORT);
*/
export default (data: Data) => {
const graphqlHandler = createHandler({
schema: schemaBuilder(data),
});
const expressMiddleware: Handler = (req, res, next) => {
if (req.is('application/json')) {
return graphqlHandler(req, res, next);
}
return graphiqlHandler(req, res, next);
};
return expressMiddleware;
};