Partage
  • Partager sur Facebook
  • Partager sur Twitter

Problème pour créer une API REST

    16 juin 2021 à 9:44:35

    Bonjour,

    Je souhaites créer une API REST pour récupérer des données de ma base SQL Server.

    Mais quand j'effectue une requête via curl () ou Postman, une erreur me dit que je n'ai pas de connexion spécifié pour ma requête....

    Voici mon code :

    //Le service SQL Server Browser doit être démarré
    //npm i express, mssql, body-parser
    var express = require('express'); // Web Framework
    var app = express();
    var sql = require('mssql'); // MS Sql Server client
    
    // Connection string parameters.
    var sqlConfig = {
        user: 'sa',
        password: '****',
        server: 'INEO-DEV',
        port: "1433",
        database: 'RCO_Tracabilite'
    }
    
    // Start server and listen on http://localhost:8081/
    var server = app.listen(8081, function () {
        var host = server.address().address
        var port = server.address().port
    
        console.log("app listening at http://%s:%s for database : %s", host, port, sqlConfig.database)
    });
    
    
    
    app.get('/changeFormat', function (req, res) {
        sql.connect(sqlConfig, function() {
            var request = new sql.Request();
            request.query('SELECT * FROM CHANGE_FORMAT', function(err, recordset) {
                if(err) console.log(err);
                res.end(JSON.stringify(recordset)); // Result in JSON format
            });
        });
    })

     Voici l'erreur : 

    RequestError: No connection is specified for that request.
        at Request._query (C:\Users\Administrateur\Desktop\node_modules\mssql\lib\base\request.js:491:37)
        at Request._query (C:\Users\Administrateur\Desktop\node_modules\mssql\lib\tedious\request.js:353:11)
        at Request.query (C:\Users\Administrateur\Desktop\node_modules\mssql\lib\base\request.js:427:12)
        at C:\Users\Administrateur\Desktop\server.js:29:17
        at Immediate.<anonymous> (C:\Users\Administrateur\Desktop\node_modules\mssql\lib\global-connection.js:56:7)
        at processImmediate (internal/timers.js:466:21) {
      code: 'ENOCONN'


    Merci d'avance pour votre aide :)

    -
    Edité par Nicolas59Twix 18 juin 2021 à 9:39:09

    • Partager sur Facebook
    • Partager sur Twitter
      16 juin 2021 à 21:34:33

      Bonjour les fichiers remonté par la pile d'appel de l'erreur durant la requête HTTP sont les dépendances de la base de donnée que tu utilise (mssql):

      ...
      \mssql\lib\base\request.js:491:37
      \mssql\lib\tedious\request.js:353:11
      \mssql\lib\base\request.js:427:12
      ...



      Une partie de la documentation sur l'utilisation de mssql avec les callabacks indique que le premier paramètre et un status d'erreur

      Peut être tu devrait vérifié si la connexion à réussi avant de faire la requête et si il y à une erreur affiché cette erreur peut donné plus d'information sur la nature de l'erreur. Actuellement le code erreur que tu as ces ENOCONN

      qui j'imagine veut dire ERROR NO CONNECTION mais qui reste quand même flou sur la nature réel de l'erreur.

      La même documentation à une partie errors qui indique que les erreurs fournissent trois informations principale qui sont:

      error.code
      error.name
      error.message


      Ainsi que d'autre informations plus secondaire comme:

      err.number - The error number.
      err.state - The error state, used as a modifier to the number.
      err.class - The class (severity) of the error. A class of less than 10 indicates an informational message. Detailed explanation can be found here.
      err.lineNumber - The line number in the SQL batch or stored procedure that caused the error. Line numbers begin at 1; therefore, if the line number is not applicable to the message, the value of LineNumber will be 0.
      err.serverName - The server name.
      err.procName - The stored procedure name.

      Ce code doit donné un message d'erreur plus précis: 

      app.get('/changeFormat', function (req, res) {
          sql.connect(sqlConfig, function(error) {
          
          	if(!error) {
              	// la connection n'a pas de status d'erreur
              	var request = new sql.Request();
                  request.query('SELECT * FROM CHANGE_FORMAT', function(err, recordset) {
                      if(err) console.log(err);
                      res.end(JSON.stringify(recordset)); // Result in JSON format
                  });
              } else {
              	// la connection à un status d'erreur
                  console.error(`MSSQL error: ${error.name}: ${error.code} => ${error.message}`);
                  throw new Error(error);
              }
          });
      });

      A noté que dans la configuration la propriété serveur et l'hôte sur le quel la requête de connexion doit être envoyé par mssql

      var sqlConfig = {
          user: '***',
          password: '***',
          server: 'INEO-DEV', // <- host serveur SQL
          port: "1433",
          database: 'RCO_Tracabilite'
      }

      Si tu travaille en local l'hôte devrait normalement être localhost où 127.0.0.1.

      Pour posté un problème relatif au base de données sur un forum tu n'as pas besoin de montré tes identifiants de connexion si tu les remplacé par des fictif où que tu travaille en local c'est bien mais ce n'est pas nécessaire de les montré quand même, tu peut les remplacé par des *** la prochaine fois.



      -
      Edité par SamuelGaborieau3 20 juin 2021 à 6:12:25

      • Partager sur Facebook
      • Partager sur Twitter

      suggestion de présentation.

        18 juin 2021 à 9:45:02

        Hello,

        Merci pour ta réponse et ton temps :)

        En effet, je n'avais pas fait attention au mot de passe ! Par sécurité, peux-tu éditer ton message pour masquer le mot de passe stp ?

        Merci d'avance,
        • Partager sur Facebook
        • Partager sur Twitter

        Problème pour créer une API REST

        × 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