Sfoglia il codice sorgente

restructure serveur

Benoît Hubert 8 anni fa
parent
commit
194b30d619
3 ha cambiato i file con 118 aggiunte e 50 eliminazioni
  1. 3 5
      exemples/validation-de-formulaires-bootstrap/script.js
  2. 56 0
      sandboxApp.js
  3. 59 45
      server.js

+ 3 - 5
exemples/validation-de-formulaires-bootstrap/script.js

@@ -1,6 +1,3 @@
-var backendUrl = 'http://' + window.location.host.replace('3000', '3001');
-console.log(backendUrl);
-
 $.ajaxSetup({
     headers: {
         'content-type': 'application/json'
@@ -21,7 +18,7 @@ $('#register-username')
     }
 
     $.get(
-        'http://localhost:3001/username-check?username=' + username,
+        'http://localhost:3000/username-check?username=' + username,
         function(response) {
             console.log(response.success)
             if(response.success) {
@@ -52,7 +49,8 @@ $('#form-register').submit(function(e) {
     var userJSON = JSON.stringify(user);
     console.log(username, email, password);
     e.preventDefault();
-    $.post(backendUrl + '/register', userJSON, 'json');
+    $(this).find('input').val('');
+    $.post('/register', userJSON, 'json');
 })
 
 var onglets = $('#onglets li a');

+ 56 - 0
sandboxApp.js

@@ -0,0 +1,56 @@
+var express      = require('express');
+var bodyParser   = require('body-parser');
+var slug         = require('slug');
+var beautify     = require("json-beautify");
+var _            = require('lodash');
+var fs           = require('fs');
+var app          = express();
+var examplesJSON = __dirname + '/exemples/liste.json';
+var examples     = require(examplesJSON);
+
+app.use(express.static(__dirname));
+app.use(bodyParser.json());
+
+function addExample(slug, title) {
+  examples.push({ slug: slug, title: title });
+  fs.writeFileSync(examplesJSON, beautify(examples, null, 2, 100));
+}
+
+app.post('/examples', function(req, res) {
+  var title = req.body.title;
+  if(! req.body.title) {
+    res.status(400).send('Le titre ne peut pas être vide !');
+  }
+  var existingTitle = _.find(examples, { title: title });
+  if(existingTitle) {
+    res.status(400).send("L'exemple '" + title + "' existe déjà !");
+  }
+  var exampleSlug = slug(req.body.title.toLowerCase());
+  var targetDir = __dirname + '/exemples/' + exampleSlug;
+
+  fs.mkdirSync(targetDir);
+  fs.writeFileSync(targetDir + '/contenu.html', '');
+  fs.writeFileSync(targetDir + '/script.js', '');
+  addExample(exampleSlug, title);
+  res.json({ slug: exampleSlug, title: title });
+});
+
+app.put('/examples/:slug', function(req, res) {
+  var slug = req.params.slug;
+  var existing = _.find(examples, { slug: slug });
+  if(! existing) {
+    res.status(404).send("L'exemple avec l'identifiant '" + slug + "' est introuvable !");
+  }
+  var targetDir = __dirname + '/exemples/' + slug;
+  if(req.body.html) {
+    fs.writeFileSync(targetDir + '/contenu.html', req.body.html);
+  }
+  if(req.body.javascript) {
+    fs.writeFileSync(targetDir + '/script.js', req.body.javascript);
+  }
+  var theDate = new Date();
+  console.log(theDate.getHours() + ':' + theDate.getMinutes() + " - Sauvegarde de l'exemple '" + existing.title + " effectuée'");
+  res.json({ success: true });
+});
+
+module.exports = app;

+ 59 - 45
server.js

@@ -1,58 +1,72 @@
-var express      = require('express');
-var bodyParser   = require('body-parser');
-var slug         = require('slug');
-var beautify     = require("json-beautify");
-var _            = require('lodash');
-var fs           = require('fs');
-var app          = express();
-var examplesJSON = __dirname + '/exemples/liste.json';
-var examples     = require(examplesJSON);
-
-app.use(express.static(__dirname));
-app.use(bodyParser.json());
-
-function addExample(slug, title) {
-  examples.push({ slug: slug, title: title });
-  fs.writeFileSync(examplesJSON, beautify(examples, null, 2, 100));
+var app = require('./sandboxApp');
+
+
+/**
+ * Création d'un tableau vide où on va stocker les utilisateurs
+ */
+var userList = [];
+var userId = 1;
+
+/**
+ * Création d'un utilisateur : on le stocke dans le tableau userList
+ * ATTENTION ! Dans la "vraie vie", on utiliserait une base de données !
+ */
+function createNewUser(user) {
+
+  // On vérifie que les données de l'utilisateur sont renseignées
+  // Si non, on renvoie false
+  if(! user || ! user.username || ! user.email || ! user.password) {
+    return false;
+  }
+
+  // L'étape de vérification a réussi, on insère l'utilisateur dans le tableau
+  // On crée un faux "id" pour simuler une insertion SQL. En SQL les "id" sont
+  // incrémentés à chaque insertion. On simule cela en incrémentant un compteur
+  // "userId" à chaque insertion
+  userList.push({
+    id: userId++,
+    username: user.username,
+    email:    user.email,
+    password: user.password
+  });
+  return true;
 }
 
-app.post('/examples', function(req, res) {
-  var title = req.body.title;
-  if(! req.body.title) {
-    res.status(400).send('Le titre ne peut pas être vide !');
+
+/**
+ * Ce code va gérer la requête POST vers l'URL /register de notre micro-serveur
+ */
+app.post('/register', function(req, res) {
+
+  // Les données envoyées par le client (navigateur) sont dans la propriété "body"
+  // de l'objet req (pour request)
+  var user = req.body;
+
+  // createNewUser() va nous renvoyer true ou false
+  var success = createNewUser(user);
+
+  if(success) {
+    // Envoyer un message sur la console du serveur
+    console.log('Utilisateur enregistré: ', user, '\nListe des utilisateurs', userList);
+    res.json({ user: user });
   }
-  var existingTitle = _.find(examples, { title: title });
-  if(existingTitle) {
-    res.status(400).send("L'exemple '" + title + "' existe déjà !");
+  else {
+    res.status(400).json({ error: 'Champs manquants dans la requête' });
   }
-  var exampleSlug = slug(req.body.title.toLowerCase());
-  var targetDir = __dirname + '/exemples/' + exampleSlug;
-
-  fs.mkdirSync(targetDir);
-  fs.writeFileSync(targetDir + '/contenu.html', '');
-  fs.writeFileSync(targetDir + '/script.js', '');
-  addExample(exampleSlug, title);
-  res.json({ slug: exampleSlug, title: title });
 });
 
-app.put('/examples/:slug', function(req, res) {
-  var slug = req.params.slug;
-  var existing = _.find(examples, { slug: slug });
-  if(! existing) {
-    res.status(404).send("L'exemple avec l'identifiant '" + slug + "' est introuvable !");
-  }
-  var targetDir = __dirname + '/exemples/' + slug;
-  if(req.body.html) {
-    fs.writeFileSync(targetDir + '/contenu.html', req.body.html);
+app.get('/username-check', function(req, res) {
+  var username = req.query.username;
+  for(u = 0 ; u < userList.length ; u++) {
+    if(username === userList[u].username) {
+      return res.json({ success: false });
+    }
   }
-  if(req.body.javascript) {
-    fs.writeFileSync(targetDir + '/script.js', req.body.javascript);
-  }
-  var theDate = new Date();
-  console.log(theDate.getHours() + ':' + theDate.getMinutes() + " - Sauvegarde de l'exemple '" + existing.title + " effectuée'");
   res.json({ success: true });
 });
 
 
+
+
 console.log('Le serveur écoute sur le port 3000. Laissez cette console ouverte !')
 app.listen(3000);