GraphQL Sailboat is a simple and efficient Node.js GraphQL HTTP Server, built with TypeScript and Express. Our goal is to increase productivity in the development of amazing GraphQL APIs. Just take your sailboat and sail!
yarn add graphql-sailboat
const { server } = require('graphql-sailboat')
const schema = `[Your Schema]`
const resolvers = {
// Your Resolvers
}
server(schema, resolvers, {
path: '/sample', // optional, '/graphql' by default
graphiql: false, // optional, true by default
port: 8080 // optional, 7000 by default
})
const { server } = require('graphql-sailboat')
const data = [{
id: 1,
tile: "The Shawshank Redemption",
year: 1994,
duration: 142,
genre: "Drama",
imdbRate: 9.3,
director: "Frank Darabont"
}, {
id: 2,
title: "The Godfather",
year: 1972,
duration: 175,
genre: "Drama, Crime",
imdbRate: 9.2,
director: "Francis Ford Coppola"
}, {
id: 3,
title: "The Dark Knight",
year: 2008,
duration: 152,
genre: "Action, Crime, Drama",
imdbRate: 9.0
}];
const schema = `
type Movie {
id: ID!,
title: String!,
year: Int!,
duration: Int!,
genre: String!,
imdbRate: Float!,
director: String
}
type Query {
getMovies: [Movie],
bestMovie: Movie,
searchMovie(_id: ID): Movie
}
`;
const resolvers = {
getMovies: () => data,
bestMovie: () => {
let theBest;
let rate;
data.map(e => {
if (!rate) {
rate = e.imdbRate;
theBest = e;
} else if (e.imdbRate > rate) {
rate = e.imdbRate;
theBest = e;
}
});
return theBest;
},
searchMovie: args => {
const id = args;
const movie = data.filter(e => e.id === id);
return movie[0];
}
};
server(schema, resolvers, {
port: 8000
});
You can acess express object and create custom middlewares importing app
, like this:
const { server, app } = require('graphql-sailboat')
// example of basic auth middleware
app.use((req, res, next) => {
const auth = { login: 'user', password: 'pass' };
const b64auth = (req.headers.authorization || '').split(' ')[1] || '';
const [login, password] = Buffer.from(b64auth, 'base64').toString().split(':');
if (login && password && login === auth.login && password === auth.password) {
return next();
}
res.set('WWW-Authenticate', 'Basic realm="401"');
return res.status(401).send('Authentication required.');
})
// ...
// ...
// ...
server(schema, resolvers, {
port: 8000
});