Partage
  • Partager sur Facebook
  • Partager sur Twitter

NODEJS Api

Sujet résolu
    16 janvier 2018 à 16:00:32

    Bonjour, J'ai commencé mon API et je suis bloqué sur le fait de pouvoir insérez plusieurs données dans plusieurs tables differentes dans une seule requête, en mysql c'est possible du coup j'ai besoin d'aide pour pouvoir avancé 

    var http = require("http");
    var express = require('express');
    var app = express();
    var mysql      = require('mysql');
    var bodyParser = require('body-parser');
    
    var PHPUnserialize = require('php-unserialize');
    const Serialize = require('php-serialize');
    
    var connection = mysql.createConnection({
      host     : 'localhost',
      user     : 'root',
      password : 'root',
      database : 'restapi',
      port     : '8889'
    });
    
    
    connection.connect(function(error) {
      if (error) throw error
      console.log('\nCongrats MySQL Server success connect')
    })
    
    app.use(bodyParser.json());       // to support JSON-encoded bodies
    app.use(bodyParser.urlencoded({     // to support URL-encoded bodies
      extended: true
    }));
    
    var server = app.listen(4000, "127.0.0.1", function () {
    
      var host = server.address().address
      var port = server.address().port
    
      console.log("Server listening at http://%s:%s", host, port)
    
    });
    
    //GET Domains
    app.get('/api/domains.json', function (req, res) {
      connection.query('select id, name, created_at from domain', function (error, results, fields) {
        if (error) throw error;
        var domain = results[0];
        if (domain == undefined) {
          res.status(404);
          res.send({
            code: 404,
            message: "Not found"
          });
        } else {
          res.send({
            code: 200,
            message: 'success',
            datas: results
          });
        }
      });
    });
    
    //Get Domain By ID
    app.get('/api/domain/:id.json', function(req, res) {
      var domain_id = req.params.id;
      var sql1 = 'SELECT * FROM domain WHERE id = "' + domain_id + '"';
    
      connection.query(sql1, function(error, data) {
        if (error) throw error;
        var domain = data[0];
        if (domain == undefined) {
          res.status(404);
          return res.send({
            code: 404,
            message: "Not found"
          });
        }
        connection.query('SELECT us.username, us.id FROM user AS us WHERE us.id ="' + domain.user_id + '"', function(error, data1) {
          if (error) throw error;
    
          domain["user_id"] = domain["user"];
          domain["creator"] = data1[0];
    
          connection.query('SELECT * FROM lang', function(error, result) {
            domain["lang"] = result;
    
            res.send({
              code: 200,
              message: 'success',
              datas: domain
            });
          });
        });
      });
    });
    
    // POST Step 4
    app.post('/api/domain/:id/translation.json', function(req, res) {
      var domain_id = req.params.id;
      var insertQuery = mysql.format("INSERT INTO translation (`key`, `domain_id`) VALUES (?,?);", [req.body.key, domain_id]);
      var insertQuery2 = mysql.format("INSERT INTO translation_to_lang (`lang_id`, `value`) VALUES (?,?);", [req.body.lang_id, req.body.value]);
      connection.query(insertQuery, function(error, result) {
        if (error) {
          return res.status(400).send({
            code: 400,
            message: 'Bad Request'
          });
    
        }
        connection.query(insertQuery, function(error, result) {
    
          if (error) {
            return res.status(400).send({
              code: 400,
              message: 'Bad Request'
            });
          }
    
        });
        console.log(result);
        var selectQuery = mysql.format("SELECT * FROM translation WHERE id = ?;", result.insertId);
        connection.query(selectQuery, function(error, data_insert) {
          setTimeout(function () {
            res.send({
              code: 201,
              message: 'success',
              datas: data_insert
            });
          }, 1000);
    
        });
      });})
    
      app.all('/*', function(req, res, next) {
        // CORS headers
        res.header("Access-Control-Allow-Origin", "*"); // restrict it to the required domain
        res.header('Access-Control-Allow-Methods', 'GET,PUT,POST,DELETE,OPTIONS');
        // Set custom headers for CORS
        res.header('Access-Control-Allow-Headers', 'Content-type,Accept,X-Access-Token,X-Key');
        if (req.method == 'OPTIONS') {
          res.status(200).end();
        } else {
          res.status(404);
          res.send({
            code: 404,
            message: "Not found"
          });
        }
      });
    

    Au niveau de la requête post je viens de la modifié afin d'être plus compréhensible, les 2 requêtes INSERT INTO je voudrai simplement en fire une seule mais qui contient les 2. ça m'aiderai vachement après si y'au d'autres solution à ce problème je suis preneur

    • Partager sur Facebook
    • Partager sur Twitter
    Le vrai courage n'est pas de savoir quand supprimer une vie, mais quand en épargner une.
      16 janvier 2018 à 20:00:57

      Bonjour,

      Il semble que le support des requêtes multiples soit désactivé par défaut avec cette bibliothèque pour des raisons de sécurité. Il faut l'autoriser explicitement comme indiqué dans la documentation.

      var connection = mysql.createConnection({ multipleStatements: true })



      -
      Edité par Yovar 16 janvier 2018 à 20:01:46

      • Partager sur Facebook
      • Partager sur Twitter

      NODEJS Api

      × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
      × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
      • Editeur
      • Markdown