From a5eb644a6c8f7a55e2a4a1f1d581a88825401bbd Mon Sep 17 00:00:00 2001 From: ManifoldFR <wilson.jallet@gmail.com> Date: Sun, 25 Feb 2018 01:05:20 +0100 Subject: [PATCH] Setup knex.js MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Première migration sur la table 'groups' + seed --- .eslintignore | 2 + .eslintrc.json | 24 +--- .gitignore | 4 +- README.md | 4 +- dist/bundle.js | 131 --------------------- knex_router.js | 5 + knexfile.js | 9 +- migrations/20180225001319_create_groups.js | 17 +++ package-lock.json | 6 +- package.json | 10 +- seeds/01_create_groups.js | 29 +++++ src/index.js | 19 ++- src/server.js | 16 +-- webpack.config.js | 10 +- 14 files changed, 103 insertions(+), 183 deletions(-) create mode 100644 .eslintignore delete mode 100644 dist/bundle.js create mode 100644 knex_router.js create mode 100644 migrations/20180225001319_create_groups.js create mode 100644 seeds/01_create_groups.js diff --git a/.eslintignore b/.eslintignore new file mode 100644 index 0000000..126664b --- /dev/null +++ b/.eslintignore @@ -0,0 +1,2 @@ +migrations/ +seeds/ \ No newline at end of file diff --git a/.eslintrc.json b/.eslintrc.json index 4181705..4a15836 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -8,25 +8,9 @@ "sourceType": "module" }, "rules": { - "indent": [ - "error", - 4 - ], - "linebreak-style": [ - "error", - "unix" - ], - "quotes": [ - 1, - "single" - ], - "semi": [ - "error", - "never" - ], - "no-console": [ - 0, - "never" - ] + "indent": ["error",4], + "linebreak-style": ["error","unix"], + "semi": ["error","always"], + "no-console": 0 } } \ No newline at end of file diff --git a/.gitignore b/.gitignore index 458bf37..9b5dfd3 100644 --- a/.gitignore +++ b/.gitignore @@ -61,4 +61,6 @@ typings/ .next # VS Code config files -.vscode/ \ No newline at end of file +.vscode/ + +build/ \ No newline at end of file diff --git a/README.md b/README.md index 1deb222..422034d 100644 --- a/README.md +++ b/README.md @@ -46,11 +46,11 @@ Donc, combiner `npm run watch` et `npm test` permet de recompiler le serveur __e ## ESLint -On utilisera ESLint pour standardiser le code : un ensemble de règles de style pour le code sont appliquées, et quelques-unes d'entre elles sont dans le fichier `.eslintrc.json`. Pour l'instant, la config ESLint impose d'utiliser quatre espaces pour les indentations et de ne pas utiliser de point-virgule en fin de ligne. +On utilisera ESLint pour standardiser le code : un ensemble de règles de style pour le code sont appliquées, et quelques-unes d'entre elles sont dans le fichier `.eslintrc.json`. Pour l'instant, la config ESLint impose d'utiliser quatre espaces pour les indentations et d'utiliser des points-virgule en fin de ligne. Pour faire valider un fichier `file.js` par ESLint, utilisez - npm run eslint file.js + npm run lint file.js et avec l'option `--fix` pour corriger le fichier. diff --git a/dist/bundle.js b/dist/bundle.js deleted file mode 100644 index 59b8ead..0000000 --- a/dist/bundle.js +++ /dev/null @@ -1,131 +0,0 @@ -/******/ (function(modules) { // webpackBootstrap -/******/ // The module cache -/******/ var installedModules = {}; -/******/ -/******/ // The require function -/******/ function __webpack_require__(moduleId) { -/******/ -/******/ // Check if module is in cache -/******/ if(installedModules[moduleId]) { -/******/ return installedModules[moduleId].exports; -/******/ } -/******/ // Create a new module (and put it into the cache) -/******/ var module = installedModules[moduleId] = { -/******/ i: moduleId, -/******/ l: false, -/******/ exports: {} -/******/ }; -/******/ -/******/ // Execute the module function -/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); -/******/ -/******/ // Flag the module as loaded -/******/ module.l = true; -/******/ -/******/ // Return the exports of the module -/******/ return module.exports; -/******/ } -/******/ -/******/ -/******/ // expose the modules object (__webpack_modules__) -/******/ __webpack_require__.m = modules; -/******/ -/******/ // expose the module cache -/******/ __webpack_require__.c = installedModules; -/******/ -/******/ // define getter function for harmony exports -/******/ __webpack_require__.d = function(exports, name, getter) { -/******/ if(!__webpack_require__.o(exports, name)) { -/******/ Object.defineProperty(exports, name, { -/******/ configurable: false, -/******/ enumerable: true, -/******/ get: getter -/******/ }); -/******/ } -/******/ }; -/******/ -/******/ // getDefaultExport function for compatibility with non-harmony modules -/******/ __webpack_require__.n = function(module) { -/******/ var getter = module && module.__esModule ? -/******/ function getDefault() { return module['default']; } : -/******/ function getModuleExports() { return module; }; -/******/ __webpack_require__.d(getter, 'a', getter); -/******/ return getter; -/******/ }; -/******/ -/******/ // Object.prototype.hasOwnProperty.call -/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); }; -/******/ -/******/ // __webpack_public_path__ -/******/ __webpack_require__.p = ""; -/******/ -/******/ // Load entry module and return exports -/******/ return __webpack_require__(__webpack_require__.s = 0); -/******/ }) -/************************************************************************/ -/******/ ([ -/* 0 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__server__ = __webpack_require__(1); - - -__WEBPACK_IMPORTED_MODULE_0__server__["a" /* default */].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+' !') -}) - -// define port server is to listen on -const port = process.env.PORT || 8888 - -__WEBPACK_IMPORTED_MODULE_0__server__["a" /* default */].listen(port, () => console.log('Express server running on port '+port)) - -/***/ }), -/* 1 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_express__ = __webpack_require__(2); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_express___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_express__); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_body_parser__ = __webpack_require__(3); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_body_parser___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_body_parser__); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_morgan__ = __webpack_require__(4); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_morgan___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_2_morgan__); - - - - -let server = __WEBPACK_IMPORTED_MODULE_0_express___default()() - -server.use(__WEBPACK_IMPORTED_MODULE_1_body_parser___default.a.json()) -server.use(__WEBPACK_IMPORTED_MODULE_1_body_parser___default.a.urlencoded({ - extended: false -})) - -server.use(__WEBPACK_IMPORTED_MODULE_2_morgan___default()('dev')) - -/* harmony default export */ __webpack_exports__["a"] = (server); - - -/***/ }), -/* 2 */ -/***/ (function(module, exports) { - -module.exports = require("express"); - -/***/ }), -/* 3 */ -/***/ (function(module, exports) { - -module.exports = require("body-parser"); - -/***/ }), -/* 4 */ -/***/ (function(module, exports) { - -module.exports = require("morgan"); - -/***/ }) -/******/ ]); \ No newline at end of file diff --git a/knex_router.js b/knex_router.js new file mode 100644 index 0000000..0b63365 --- /dev/null +++ b/knex_router.js @@ -0,0 +1,5 @@ +const environment = process.env.NODE_ENV || 'development'; +const config = require('./knexfile')[environment]; +console.log(config); + +module.exports = require('knex')(config); \ No newline at end of file diff --git a/knexfile.js b/knexfile.js index ce86cf7..cc65ddc 100644 --- a/knexfile.js +++ b/knexfile.js @@ -4,7 +4,12 @@ module.exports = { development: { client: 'postgresql', - connection: 'postgres://localhost/sigma_dev', + connection: { + host: 'localhost', + user: 'will', + password: 'password', + database: 'sigma_dev' + }, pool: { min: 2, max: 10 @@ -14,4 +19,4 @@ module.exports = { } } -} +}; diff --git a/migrations/20180225001319_create_groups.js b/migrations/20180225001319_create_groups.js new file mode 100644 index 0000000..0bac711 --- /dev/null +++ b/migrations/20180225001319_create_groups.js @@ -0,0 +1,17 @@ + +exports.up = function (knex, Promise) { + return knex.schema.createTable('groups', function (table) { + table.increments('id').unsigned().primary(); + table.dateTime('createdAt').defaultTo(knex.fn.now()); + table.dateTime('updatedAt').defaultTo(knex.fn.now()); + + table.string('name').notNullable(); + table.string('website').defaultTo(''); + table.text('description').defaultTo(''); + table.enum('school', ['polytechnique', 'ensta', 'supoptique']).notNullable(); + }); +}; + +exports.down = function (knex, Promise) { + return knex.schema.dropTable('groups'); +}; diff --git a/package-lock.json b/package-lock.json index 977695b..d44322b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1425,9 +1425,9 @@ } }, "eslint-plugin-node": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-node/-/eslint-plugin-node-6.0.0.tgz", - "integrity": "sha512-Qj4dMF1N/wRALO1IRvnchn8c1i0awgrztrGx7MjF9ewDwlW/heNB+WeZ09bhp8Yp0TD+BZcADP8BRya0wmropA==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-node/-/eslint-plugin-node-6.0.1.tgz", + "integrity": "sha512-Q/Cc2sW1OAISDS+Ji6lZS2KV4b7ueA/WydVWd1BECTQwVvfQy5JAi3glhINoKzoMnfnuRgNP+ZWKrGAbp3QDxw==", "dev": true, "requires": { "ignore": "3.3.7", diff --git a/package.json b/package.json index 87e6f72..cd6308e 100644 --- a/package.json +++ b/package.json @@ -2,7 +2,7 @@ "name": "sigma-backend", "version": "0.0.1", "description": "Backend of sigma, the new Frankiz", - "main": "dist/bundle.js", + "main": "build/bundle.js", "dependencies": { "body-parser": "^1.18.2", "express": "^4.16.2", @@ -17,7 +17,7 @@ "eslint": "^4.18.1", "eslint-config-standard": "^11.0.0", "eslint-plugin-import": "^2.9.0", - "eslint-plugin-node": "^6.0.0", + "eslint-plugin-node": "^6.0.1", "eslint-plugin-promise": "^3.6.0", "eslint-plugin-standard": "^3.0.1", "nodemon": "^1.15.1", @@ -25,11 +25,11 @@ "webpack-node-externals": "^1.6.0" }, "scripts": { - "start": "node dist/bundle.js", - "eslint": "eslint", + "start": "node build/bundle.js", + "lint": "eslint", "build": "webpack", "watch": "webpack --watch", - "test": "nodemon --watch dist dist/bundle.js" + "test": "nodemon --watch build build/bundle.js" }, "repository": { "type": "git", diff --git a/seeds/01_create_groups.js b/seeds/01_create_groups.js new file mode 100644 index 0000000..5b5fd24 --- /dev/null +++ b/seeds/01_create_groups.js @@ -0,0 +1,29 @@ + +exports.seed = function(knex, Promise) { + // Deletes ALL existing entries + return knex('groups').del() + .then(function () { + // Inserts seed entries + const groups = [{ + id: 1, + name: 'BR', + website: 'br.binets.fr', + school: 'polytechnique' + }, + { + id: 2, + name: 'JTX', + website: 'binet-jtx.com', + school: 'polytechnique' + }, + { + id: 3, + name: 'DaTA', + website: 'data-ensta.fr', + school: 'ensta' + } + ]; + + return knex('groups').insert(groups); + }); +}; diff --git a/src/index.js b/src/index.js index 6dfce79..dbc5bb4 100644 --- a/src/index.js +++ b/src/index.js @@ -1,11 +1,18 @@ -import server from './server' +import server from './server'; +import knex from '../knex_router'; 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+' !') -}) + 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+' !'); +}); + +server.get('/groups', function(req, res) { + knex.select().from('groups').then(function(groups) { + res.send(groups); + }); +}); // define port server is to listen on -const port = process.env.PORT || 8888 +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('Express server running on port '+port)); \ No newline at end of file diff --git a/src/server.js b/src/server.js index bc37a0e..22af206 100644 --- a/src/server.js +++ b/src/server.js @@ -1,14 +1,14 @@ -import express from 'express' -import bodyParser from 'body-parser' -import morgan from 'morgan' +import express from 'express'; +import bodyParser from 'body-parser'; +import morgan from 'morgan'; -let server = express() +let server = express(); -server.use(bodyParser.json()) +server.use(bodyParser.json()); server.use(bodyParser.urlencoded({ extended: false -})) +})); -server.use(morgan('dev')) +server.use(morgan('dev')); -export default server +export default server; diff --git a/webpack.config.js b/webpack.config.js index 2222fed..9ccf107 100644 --- a/webpack.config.js +++ b/webpack.config.js @@ -1,14 +1,14 @@ -const path = require('path') -const nodeExternals = require('webpack-node-externals') +const path = require('path'); +const nodeExternals = require('webpack-node-externals'); var config = { entry: './src/index.js', target: 'node', output: { filename: 'bundle.js', - path: path.resolve(__dirname, 'dist') + path: path.resolve(__dirname, 'build') }, externals: [nodeExternals()] -} +}; -module.exports = config \ No newline at end of file +module.exports = config; \ No newline at end of file -- GitLab