import server from './server'; import colors from 'colors'; import { graphqlExpress, graphiqlExpress } from 'graphql-server-express'; import makeExecutableSchema from 'graphql-tools'; import knex from '../db/knex_router'; import path from 'path'; /** * @function Home * @summary Renvoie l'accueil du backend */ server.get('/', function(req, res) { console.log('Connecting to '+req.url); res.render('home', {title: 'Home', port: port}); }); server.get('/db?', function(req, res) { let table_name = req.query.table; let columns = req.query.columns; res.redirect(`db/${table_name}?columns=${columns}`); }); /** * @function Knex API: Get table * @summary Effectue une requête pour une table dans la BDD * @argument {string} table_name - La table voulue par l'utilisateur. */ server.get('/db/:table_name?', function(req, res) { // get columns from query let columns; if (req.query.columns) { columns = req.query.columns.split(','); } else { columns = null; } console.log(columns); knex.select(columns).from(req.params.table_name).then(function(table) { res.setHeader("Content-Type", "application/json"); res.write(JSON.stringify(table,null,2)); res.end(); },function() { res.status(400); res.render('error', { status: res.statusCode, error_message: "Bad request: can't find table " + req.params.table_name }); res.end(); } ); }); /** * @function Error 404 catcher * @summary Catche les requêtes en dehors des URL acceptées */ server.use((req, res, next) => { let err = new Error('Not found'); err.status = 404; next(err); }); /** * @function Error 404 handler * @summary Gère les erreurs 404 */ server.use((err, req, res, next) => { res.locals.message = err.message; res.status(err.status || 500); let error_message = res.statusCode == 404 ? 'Not found.' : 'Internal server error.'; res.render('error', { status: res.statusCode, error_message: error_message }); }); // define port server is to listen on const port = process.env.PORT || 3000; server.listen(port, () => console.log(colors.blue('Express server running on port', port)));