10
votes

Utilisation de nœud.js pour se connecter à une API de repos

est-il raisonnable d'utiliser node.js pour écrire une application autonome qui connectera deux API de repos?

Une extrémité sera un point de vente - système

L'autre sera une plate-forme de commerce électronique hébergée

Il y aura une interface minimale pour la configuration du service. rien de plus.


1 commentaires

Oui c'est OK. Je ne vois pas pourquoi vous ne pouvez pas utiliser nœud.js à cette fin.


4 Réponses :


1
votes

Bien sûr. L'API NODE.JS contient des méthodes pour effectuer des demandes HTTP:


0 commentaires

29
votes

Oui, nœud.js est parfaitement adapté pour passer des appels vers des API externes. Tout comme tout dans le nœud, cependant, les fonctions de création de ces appels sont basées sur des événements, ce qui signifie faire des choses comme la mise sous forme de données de réponse de la réponse à la réception d'une seule réponse complétée.

Par exemple: P>

// get walking directions from central park to the empire state building
var http = require("http");
    url = "http://maps.googleapis.com/maps/api/directions/json?origin=Central Park&destination=Empire State Building&sensor=false&mode=walking";

// get is a simple wrapper for request()
// which sets the http method to GET
var request = http.get(url, function (response) {
    // data is streamed in chunks from the server
    // so we have to handle the "data" event    
    var buffer = "", 
        data,
        route;

    response.on("data", function (chunk) {
        buffer += chunk;
    }); 

    response.on("end", function (err) {
        // finished transferring data
        // dump the raw data
        console.log(buffer);
        console.log("\n");
        data = JSON.parse(buffer);
        route = data.routes[0];

        // extract the distance and time
        console.log("Walking Distance: " + route.legs[0].distance.text);
        console.log("Time: " + route.legs[0].duration.text);
    }); 
}); 


2 commentaires

Je me réchauffe vraiment au noeud du modèle filé. lorsque les données sont chuntées dans comme ceci. Est-il possible de commencer à le manipuler avant la fin du flux? arrive-t-il dans l'ordre?


Merci! Oui, les données sont diffusées dans l'ordre. Si vous êtes en mesure d'utiliser les données avant la mise en streaming, je ne vois pas pourquoi vous ne pouviez pas travailler avec elle avant alors (bien que je n'ai pas encore eu de cas d'utilisation pour cela).



-1
votes

Un outil plus simple et utile consiste à utiliser une API comme unirsest; L'UREST est un package en NPM qui est juste trop facile à utiliser JUS comme xxx

});


2 commentaires

"res" est indéfini!


Yo doit le mettre dans un itinéraire dans app.get ('/', auth.Protég, fonction (req, res) {});



0
votes
/*Below logics covered in below sample GET API    
    -DB connection created in class
    -common function to execute the query 
    -logging through bunyan library*/


const { APIResponse} = require('./../commonFun/utils');
    const createlog = require('./../lib/createlog');
    var obj = new DB();
    //Test API
    routes.get('/testapi', (req, res) => {
        res.status(201).json({ message: 'API microservices test' });
    });
    dbObj = new DB();
    routes.get('/getStore', (req, res) => {
        try {
            //create DB instance

            const store_id = req.body.storeID;
            const promiseReturnwithResult = selectQueryData('tablename', whereField, dbObj.conn);
            (promiseReturnwithResult).then((result) => {
                APIResponse(200, 'Data fetched successfully', result).then((result) => {
                    res.send(result);
                });
            }).catch((err) => { console.log(err); throw err; })
        } catch (err) {
            console.log('Exception caught in getuser API', err);
            const e = new Error();
            if (err.errors && err.errors.length > 0) {
                e.Error = 'Exception caught in getuser API';
                e.message = err.errors[0].message;
                e.code = 500;
                res.status(404).send(APIResponse(e.code, e.message, e.Error));
                createlog.writeErrorInLog(err);
            }
        }
    });

    //create connection
    "use strict"
    const mysql = require("mysql");

    class DB {
      constructor() {
        this.conn = mysql.createConnection({
          host: 'localhost',
          user: 'root',
          password: 'pass',
          database: 'db_name'
        });
      }

      connect() {
        this.conn.connect(function (err) {
          if (err) {
            console.error("error connecting: " + err.stack);
            return;
          }
          console.log("connected to DBB");
        });
      }
      //End class
    }

    module.exports = DB


    //queryTransaction.js File

    selectQueryData= (table,where,db_conn)=>{  
        return new Promise(function(resolve,reject){
          try{  
              db_conn.query(`SELECT * FROM ${table} WHERE id = ${where}`,function(err,result){
                if(err){
                  reject(err);
                }else{
                  resolve(result);
                }
            });
          }catch(err){
              console.log(err);
          }
        });
    }

    module.exports= {selectQueryData};

    //utils.js file

    APIResponse = async (status, msg, data = '',error=null) => {  
      try {
        if (status) {
          return { statusCode: status, message: msg, PayLoad: data,error:error }
        }
      } catch (err) {
        console.log('Exception caught in getuser API', err);
      }
    }

    module.exports={
      logsSetting: {
        name: "USER-API",
        streams: [
            {
                level: 'error',
                path: '' // log ERROR and above to a file
            }
        ],
      },APIResponse
    }

    //createlogs.js File

    var bunyan = require('bunyan');
    const dateFormat = require('dateformat');
    const {logsSetting} = require('./../commonFun/utils');

    module.exports.writeErrorInLog = (customError) => {
      let logConfig = {...logsSetting};
      console.log('reached in writeErrorInLog',customError)
      const currentDate = dateFormat(new Date(), 'yyyy-mm-dd');
      const path = logConfig.streams[0].path = `${__dirname}/../log/${currentDate}error.log`;
      const log = bunyan.createLogger(logConfig);
      log.error(customError);

    }

0 commentaires