UNPKG

generator-ptz-graphql

Version:

Yeoman generator to create polutz graphql server.

73 lines (54 loc) 1.73 kB
import dotenv from 'dotenv'; dotenv.config(); import cors from 'cors'; import express from 'express'; import GraphQlHttp from 'express-graphql'; import * as fs from 'fs'; import { graphql } from 'graphql'; import { introspectionQuery } from 'graphql/utilities'; import { MongoClient } from 'mongodb'; import Schema from './core/schema'; import MONGO_URL from './mongoDbUrl'; import { UserApp } from 'ptz-user-app'; import { UserRepository } from 'ptz-user-repository'; import logFile from 'ptz-log-file'; const log = logFile({ dir: './logs' }); const app = express(); app.use(cors()); log('starting server'); const PORT = 3011; function getRunningUrl(path) { return `http://localhost:${PORT}${path}`; } async function createGraphqlSchema(schema) { const json = await graphql(schema, introspectionQuery); const file = '/public/schema.json'; fs.writeFile(`.${file}`, JSON.stringify(json, null, 2), err => { if (err) throw err; log('Json schema created!', getRunningUrl(file)); }); app.use('/public', express.static('public')); } (async () => { try { const db = await MongoClient.connect(MONGO_URL); const userApp = new UserApp({ userRepository: new UserRepository(db), log }); await userApp.seed(); const schema = Schema(userApp, log); const graphqlFolder = '/graphql'; app.use(graphqlFolder, GraphQlHttp({ schema, graphiql: true })); await createGraphqlSchema(schema); app.listen(PORT, () => { const url = getRunningUrl(graphqlFolder); log(`Running on ${url}`); }); } catch (e) { log(e); } })();