Skip to content
Snippets Groups Projects
Forked from an inaccessible project.
index.js 2.21 KiB
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)));