apollo-server/src/bindings/expressApollo.ts
2016-06-14 12:03:53 -07:00

29 lines
829 B
TypeScript

import * as express from 'express';
import * as graphql from 'graphql';
import { runQuery } from '../core/runQuery';
export interface ExpressBindings {
schema: graphql.GraphQLSchema;
}
export default function(options: ExpressBindings) {
if (!options) {
throw new Error('GraphQL middleware requires options.');
}
if (arguments.length > 1) {
throw new Error(`apolloServer expects exactly one argument, got ${arguments.length + 1}`);
}
return (req: express.Request, res: express.Response, next) => {
runQuery({
schema: options.schema,
query: req.body,
}).then(gqlResponse => {
res.set('Content-Type', 'application/json');
res.send({ data: gqlResponse.data });
}).catch(gqlResponse => {
res.send(gqlResponse.errorCode, { errors: gqlResponse.errors });
});
};
}