From bacca32ca003b539434db3c68aac94b3f6bf16c1 Mon Sep 17 00:00:00 2001 From: ManifoldFR <wilson.jallet@gmail.com> Date: Sun, 25 Feb 2018 12:45:38 +0100 Subject: [PATCH] =?UTF-8?q?m=C3=A0j?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .eslintignore | 3 +- README.md | 47 +++++++++++++++++------ package-lock.json | 95 +++++++++++++++++++++++++++++++++++++++++++++++ package.json | 3 ++ src/index.js | 13 ++++--- src/server.js | 3 +- 6 files changed, 146 insertions(+), 18 deletions(-) diff --git a/.eslintignore b/.eslintignore index 126664b..dd2214b 100644 --- a/.eslintignore +++ b/.eslintignore @@ -1,2 +1,3 @@ migrations/ -seeds/ \ No newline at end of file +seeds/ +build/ \ No newline at end of file diff --git a/README.md b/README.md index 422034d..15656c8 100644 --- a/README.md +++ b/README.md @@ -4,33 +4,58 @@ Ce dépôt contient le _backend_ de Sigma, le successeur de Frankiz. Pour obtenir une copie de ce dépôt, clonez-le avec - git clone git@gitlab.binets.fr/br/sigma-backend + git clone git@gitlab.binets.fr:br/sigma-backend.git -puis installez les dépendences JavaScript avec - - npm install +ou `git clone https://gitlab.binets.fr/br/sigma-backend.git`, puis installez les dépendences JavaScript avec `npm install`. ## Dépendances -Une dépendance, c'est un librairie JavaScript dont dépend le code source, soit pour le faire tourner soit pour faire tourner les outils dévs. Les dépendances dév servent à tester par exemple. On trouve la liste des dépendances dans `package.json`. Express est un exemple de dépendance normale, nodemon et ESLint (voir infra) sont des dépendances dev (`devDependencies`). +Une dépendance, c'est un librairie JavaScript dont dépend le code source, soit pour le faire tourner soit pour faire tourner les outils dévs. Les dépendances dév servent à tester par exemple. On trouve la liste des dépendances dans [`package.json`](./package.json). Express est un exemple de dépendance normale, nodemon et ESLint (voir infra) sont des dépendances dev (`devDependencies`). + +Les dépendances s'installent avec `npm install`. Par défaut, toutes les dépendances sont installées. Si la variable `NODE_ENV` est configurée (vérifier avec la commande `echo "$NODE_ENV"`), + +* la valeur `development` installe tout +* la valeur `production` n'installe pas les dépendances dév + +Certaines d'entre elles comme KnexJS ou Webpack devraient être installées globalement : + +```bash +npm install -g knex +npm install -g webpack +``` ## Structure Les fichiers source se situent dans le dossier `src`. -Pour l'instant, le serveur utilisé est [express.js](https://expressjs.com/) ; le serveur Express est configuré dans `server.js` puis lancé sur le port 8888 dans `index.js`. +Le serveur utilisé est [express.js](https://expressjs.com/) ; il est configuré dans [`server.js`](./src/server.js) puis lancé sur le port 8888 dans [`index.js`](./src/index.js). + +La syntaxe adoptée est JavaScript ES6, un standard moderne (2015) de JavaScript. Il permet d'importer des dépendances en utilisant le mot-clé `import`, ce que le serveur Node.js ne comprend pas puisque la version 8 de Node ne comprend que le standard ES5 (2009), qui gère les imports avec `require()`. + +Node comprend le code dans [`build/bundle.js`](./build/bundle.js), donc on le lance dessus après avoir compilé ce fichier. + +## Base de données + +La base de donnée utilisée est PostgreSQL. + +Le schéma de la BDD est géré par [Knex](http://knexjs.org). La config de Knex est dans [`knexfile.js`](./knexfile.js) : c'est un objet JSON qui précise la BDD à lequelle se connecter, l'utilisateur sous lequel elle est, le mot de passe... + +* `knex migrate:make migration_name` crée une migration dans `migrations/` : le nom du fichier est `migration_name.js` avec la date et l'heure en préfixe +* `knex migrate:latest` met à jour le schéma de la BDD +* `knex seed:make filename` crée un _seed_ `seeds/filename` +* `knex seed:run` insère les _seeds_ dans la BDD -La syntaxe adoptée est JavaScript ES6, un standard moderne (2015) de JavaScript. Il permet d'importer des dépendances en utilisant le mot-clé `import`, ce que le serveur Node.js ne comprend pas puisque la version 8 de Node ne comprend que le standard ES5, qui gère les imports avec `require()`. +### Seeds -Le fichier serveur que Node reconnaît est `dist/bundle.js`. +Un fichier _seed_ permet d'insérer des données dans la BDD. ## Scripts -Les scripts sont des instructions en ligne de commande que l'on peut faire tourner avec la commande `npm run`. Ils sont définis dans `package.json`. +Les scripts sont des instructions en ligne de commande que l'on peut faire tourner avec la commande `npm run`. Ils sont définis dans [`package.json`](./package.json). ### Transpiler le serveur -On utilisera Webpack pour transpiler le fichier source `src/index.js` en `dist/bundle.js` qui est suit la syntaxe ES5 compatible Node. Pour ça, on utilise +On utilisera Webpack pour transpiler le fichier source [`src/index.js`](./src/index.js) en [`build/bundle.js`](./build/bundle.js) qui est suit la syntaxe ES5 compatible Node. Pour ça, on utilise * `npm run build` qui exécute la commande `webpack` avec le fichier de configuration `webpack.config.js`, ou * `npm run watch` qui recompile automatiquement dès que le code est modifié. @@ -42,7 +67,7 @@ Pour faire tourner le serveur, il y a deux options : * `npm start` fait tourner le serveur `bundle.js` en mode prod sur le port 8888 (donc il faut consulter https://localhost:8888) * `npm test` le démarre avec [nodemon](https://nodemon.io/), outil dév qui redémarre automatiquement le serveur dans `bundle.js` dès que celui-ci est modifié. -Donc, combiner `npm run watch` et `npm test` permet de recompiler le serveur __et__ le redémarrer automatiquement dès qu'il y a une modification. +Donc, lancer `npm run watch` dans un terminal et `npm test` dans un autre permet de recompiler le serveur __et__ le redémarrer automatiquement dès qu'il y a une modification. ## ESLint diff --git a/package-lock.json b/package-lock.json index d44322b..4185a5e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -4,6 +4,96 @@ "lockfileVersion": 1, "requires": true, "dependencies": { + "@types/body-parser": { + "version": "1.16.8", + "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.16.8.tgz", + "integrity": "sha512-BdN2PXxOFnTXFcyONPW6t0fHjz2fvRZHVMFpaS0wYr+Y8fWEaNOs4V8LEu/fpzQlMx+ahdndgTaGTwPC+J/EeA==", + "requires": { + "@types/express": "4.11.1", + "@types/node": "9.4.6" + } + }, + "@types/events": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@types/events/-/events-1.1.0.tgz", + "integrity": "sha512-y3bR98mzYOo0pAZuiLari+cQyiKk3UXRuT45h1RjhfeCzqkjaVsfZJNaxdgtk7/3tzOm1ozLTqEqMP3VbI48jw==" + }, + "@types/express": { + "version": "4.11.1", + "resolved": "https://registry.npmjs.org/@types/express/-/express-4.11.1.tgz", + "integrity": "sha512-ttWle8cnPA5rAelauSWeWJimtY2RsUf2aspYZs7xPHiWgOlPn6nnUfBMtrkcnjFJuIHJF4gNOdVvpLK2Zmvh6g==", + "requires": { + "@types/body-parser": "1.16.8", + "@types/express-serve-static-core": "4.11.1", + "@types/serve-static": "1.13.1" + } + }, + "@types/express-serve-static-core": { + "version": "4.11.1", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.11.1.tgz", + "integrity": "sha512-EehCl3tpuqiM8RUb+0255M8PhhSwTtLfmO7zBBdv0ay/VTd/zmrqDfQdZFsa5z/PVMbH2yCMZPXsnrImpATyIw==", + "requires": { + "@types/events": "1.1.0", + "@types/node": "9.4.6" + } + }, + "@types/mime": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@types/mime/-/mime-2.0.0.tgz", + "integrity": "sha512-A2TAGbTFdBw9azHbpVd+/FkdW2T6msN1uct1O9bH3vTerEHKZhTXJUQXy+hNq1B0RagfU8U+KBdqiZpxjhOUQA==" + }, + "@types/node": { + "version": "9.4.6", + "resolved": "https://registry.npmjs.org/@types/node/-/node-9.4.6.tgz", + "integrity": "sha512-CTUtLb6WqCCgp6P59QintjHWqzf4VL1uPA27bipLAPxFqrtK1gEYllePzTICGqQ8rYsCbpnsNypXjjDzGAAjEQ==" + }, + "@types/serve-static": { + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.13.1.tgz", + "integrity": "sha512-jDMH+3BQPtvqZVIcsH700Dfi8Q3MIcEx16g/VdxjoqiGR/NntekB10xdBpirMKnPe9z2C5cBmL0vte0YttOr3Q==", + "requires": { + "@types/express-serve-static-core": "4.11.1", + "@types/mime": "2.0.0" + } + }, + "@types/tapable": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/@types/tapable/-/tapable-0.2.4.tgz", + "integrity": "sha512-pclMAvhPnXJcJu1ZZ8bQthuUcdDWzDuxDdbSf6l1U6s4fP6EBiZpPsOZYqFOrbqDV97sXGFSsb6AUpiLfv4xIA==" + }, + "@types/uglify-js": { + "version": "2.6.30", + "resolved": "https://registry.npmjs.org/@types/uglify-js/-/uglify-js-2.6.30.tgz", + "integrity": "sha512-NjiBNGFl58vHJeijl63w1fWRIjLnrfOvimsXF5b3lTzEzkTV1BnVsbqQeLejg54upsHPWIF63aiub5TEwH619A==", + "requires": { + "source-map": "0.6.1" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + } + } + }, + "@types/webpack": { + "version": "3.8.8", + "resolved": "https://registry.npmjs.org/@types/webpack/-/webpack-3.8.8.tgz", + "integrity": "sha512-pZxQOJR7NvRn913/hklPmmVjG4cCjyz6WmhIEtqJYGjjG2MXpBIlFAsq+wXXZslJLBdMiIzUAIt53u9fhU9prA==", + "requires": { + "@types/node": "9.4.6", + "@types/tapable": "0.2.4", + "@types/uglify-js": "2.6.30", + "source-map": "0.6.1" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + } + } + }, "abbrev": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", @@ -831,6 +921,11 @@ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" }, + "colors": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.1.2.tgz", + "integrity": "sha1-FopHAXVran9RoSzgyXv6KMCE7WM=" + }, "commander": { "version": "2.14.1", "resolved": "https://registry.npmjs.org/commander/-/commander-2.14.1.tgz", diff --git a/package.json b/package.json index cd6308e..5ba8eab 100644 --- a/package.json +++ b/package.json @@ -4,7 +4,10 @@ "description": "Backend of sigma, the new Frankiz", "main": "build/bundle.js", "dependencies": { + "@types/express": "^4.11.1", + "@types/webpack": "^3.8.8", "body-parser": "^1.18.2", + "colors": "^1.1.2", "express": "^4.16.2", "fs": "0.0.1-security", "graphql": "^0.13.1", diff --git a/src/index.js b/src/index.js index dbc5bb4..a088ea8 100644 --- a/src/index.js +++ b/src/index.js @@ -1,18 +1,21 @@ import server from './server'; import knex from '../knex_router'; +import colors from 'colors/safe'; server.get('/', function(req, res) { console.log('Connectting to '+req.url); - res.send('<h1>Hello, world</h1>\nHello, world ! This is server talking to you live from Omaha on port '+port+' !'); + res.send(`<h1>Hello, world</h1> + + Hello, world ! This is server talking to you live on port `+port+' !'); }); -server.get('/groups', function(req, res) { - knex.select().from('groups').then(function(groups) { - res.send(groups); +server.get('/db/:table', function(req, res) { + knex.select().from(req.params.table).then(function(table) { + res.send(table); }); }); // define port server is to listen on const port = process.env.PORT || 3000; -server.listen(port, () => console.log('Express server running on port '+port)); \ No newline at end of file +server.listen(port, () => console.log(colors.blue('Express server running on port', port))); \ No newline at end of file diff --git a/src/server.js b/src/server.js index 22af206..0334241 100644 --- a/src/server.js +++ b/src/server.js @@ -2,13 +2,14 @@ import express from 'express'; import bodyParser from 'body-parser'; import morgan from 'morgan'; -let server = express(); +const server = express(); server.use(bodyParser.json()); server.use(bodyParser.urlencoded({ extended: false })); +// Morgan is middleware for logging requests server.use(morgan('dev')); export default server; -- GitLab