@jaymun723/apollo-server-vercel
Version:
Production-ready Node.js GraphQL server for Vercel Serverless Functions (temporary package).
39 lines (35 loc) • 1.11 kB
JavaScript
import { runHttpQuery, convertNodeHttpToRequest } from "apollo-server-core";
import { setHeaders } from "./setHeaders.js";
export function graphqlVercel(options) {
if (!options) throw new Error(`Apollo Server requires options.`);
if (arguments.length > 1) {
throw new Error(`Apollo Server expects exactly one argument, got ${arguments.length}`);
}
const graphqlHandler = async (req, res) => {
if (req.method === `POST` && !req.body) {
return res.status(500).send(`POST body missing.`);
}
try {
const {
graphqlResponse,
responseInit
} = await runHttpQuery([req, res], {
method: req.method,
options,
query: req?.body || req.query,
request: convertNodeHttpToRequest(req)
});
setHeaders(res, responseInit.headers ?? {});
return res.status(200).send(graphqlResponse);
} catch (error) {
const {
headers,
statusCode,
message
} = error;
setHeaders(res, headers ?? {});
return res.status(statusCode).send(message);
}
};
return graphqlHandler;
}