Apollo Server Graphql в AWS Lambda
У меня есть локальный экземпляр, работающий нормально с библиотеками Apollo Graphql, но я хочу использовать ту же схему и преобразователи в AWS Lambda.
Мой текущий код:
var makeExecutableSchema = require('graphql-tools').makeExecutableSchema;
var resolvers = require('./resolvers/root').root;
var schema = require('./schema/graphSchema').schema;
import graphqlHTTP from 'express-graphql';
import express from 'express';
//graphql express
import bodyParser from 'body-parser';
import { graphqlExpress, graphiqlExpress } from 'graphql-server-express';
import path from 'path';
const config = require('./config/main.json');
const port = (!global.process.env.PORT) ? 1234 : global.process.env.PORT;
const server = global.server = express();
const allowCrossDomain = function (req, res, next) {
//slow down the requests to mimic latency
setTimeout(() => {
res.header('Access-Control-Allow-Origin', '*');
res.header('Access-Control-Allow-Methods', 'GET,POST,OPTIONS');
res.header('Access-Control-Allow-Headers', 'Connection, Host, Origin, Referer, Access-Control-Request-Method, Access-Control-Request-Headers, User-Agent, Accept, Content-Type, Authorization, Content-Length, X-Requested-With, Accept-Encoding, Accept-Language');
if ('OPTIONS' == req.method) {
res.sendStatus(200);
} else {
next();
}
}, 1000);
}
var executableSchema = makeExecutableSchema({
typeDefs: schema,
resolvers: resolvers,
});
exports.executableSchema = executableSchema;
server.set('port', port);
server.use(express.static(path.join(__dirname, 'public')));
server.use(allowCrossDomain);
server.use('/graphql',
bodyParser.json(),
graphqlExpress({
schema: executableSchema
}));
server.use('/graphiql',
graphiqlExpress({
endpointURL: '/graphql'
}));
server.listen(server.get('port'), () => {
console.log('The server is running at http://localhost:' + server.get('port'));
});
я использую graphql-tools
присоединиться к схеме и распознавателям вместо использования graphql makeSchema
метод.
Я не уверен, как преобразовать старый код graphql, который работал в тот же рабочий пример, используя инструменты и сервер apollo...
в лямбда-обработчике у меня есть это, но нужно, чтобы использовать сервер Apollo Express.
var graphql = require('graphql').graphql;
var resolvers = require('./src/resolvers/root').root;
var schema = require('./src/schema/graphSchema').schema;
module.exports.graphql = (event, context, callback) => {
graphql(schema, event.body.query, resolvers, {}, event.body.variables)
.then((response) => callback(null, response))
.catch((error) => callback(error));
};
Что можно использовать здесь в лямбда-функции для использования graphqlExpress
вместо?
1 ответ
Я тоже боролся с этим. Я обнаружил, что самым безопасным решением является объединение aws-serverless-express
с express-graphql
, Это не самое простое решение, поэтому мне пришлось создать для него модуль: https://www.npmjs.com/package/lambda-graphql