Files
speckle-server/app.js
T

88 lines
2.3 KiB
JavaScript

'use strict'
let http = require( 'http' )
const express = require( 'express' )
const root = require( 'app-root-path' )
const logger = require( 'morgan-debug' )
const bodyParser = require( 'body-parser' )
const debug = require( 'debug' )( 'speckle:generic' )
const { ApolloServer } = require( 'apollo-server-express' )
require( 'dotenv' ).config( { path: `${root}/.env` } )
const { contextApiTokenHelper } = require( './modules/shared' )
const knex = require( './db/knex' )
/**
* Initialises the express application together with the graphql server middleware.
* @return {[type]} an express applicaiton and the graphql server
*/
exports.init = async ( ) => {
const app = express( )
await knex.migrate.latest( )
if ( process.env.NODE_ENV !== 'test' ) {
app.use( logger( 'speckle', 'dev', {} ) )
}
app.use( bodyParser.json( ) )
app.use( bodyParser.urlencoded( { extended: false } ) )
const { init, graph } = require( './modules' )
// Initialise default modules, including rest api handlers
await init( app )
// Initialise graphql server
const graphqlServer = new ApolloServer( {
...graph( ),
context: contextApiTokenHelper,
tracing: process.env.NODE_ENV === 'test' || process.env.NODE_ENV === 'development'
} )
graphqlServer.applyMiddleware( { app: app } )
return { app, graphqlServer }
}
/**
* Starts a http server, hoisting the express app to it.
* @param {[type]} app [description]
* @return {[type]} [description]
*/
exports.startHttp = async ( app ) => {
let port = process.env.PORT || 3000
app.set( 'port', port )
let setupComplete = await require( `${root}/setupcheck` )( )
debug( `Setup is ${setupComplete ? '' : 'not'} complete. Serving ${setupComplete ? 'main app' : 'setup app'}` )
app.use( '/', express.static( `${root}/frontend/dist` ) )
app.all( '*', ( req, res ) => {
try {
if ( setupComplete ) {
res.sendFile( `${root}/frontend/dist/app.html` )
} else {
res.sendFile( `${root}/frontend/dist/setup.html` )
}
} catch ( error ) {
res.json( { success: false, message: "Something went wrong" } )
}
} );
let server = http.createServer( app )
server.on( 'listening', ( ) => {
debug( `Listening on ${server.address().port}` )
} )
server.listen( port )
return { server }
}