web-dev-qa-db-fra.com

Comment faire un appel d'API externe à l'intérieur du serveur express?

Bonjour, j'ai essayé d'implémenter l'API OneSignal sur mon tableau de bord et je me demande s'il est possible de faire un appel externe API à l'intérieur du serveur express.

Voici un exemple:

var sendNotification = function(data) {
  var headers = {
    "Content-Type": "application/json; charset=utf-8",
    "Authorization": "Basic NGEwMGZmMjItY2NkNy0xMWUzLTk5ZDUtMDAwYzI5NDBlNjJj"
  };

  var options = {
    Host: "onesignal.com",
    port: 443,
    path: "/api/v1/notifications",
    method: "POST",
    headers: headers
  };

  var https = require('https');
  var req = https.request(options, function(res) {  
    res.on('data', function(data) {
      console.log("Response:");
      console.log(JSON.parse(data));
    });
  });

  req.on('error', function(e) {
    console.log("ERROR:");
    console.log(e);
  });

  req.write(JSON.stringify(data));
  req.end();
};

Voici l'itinéraire de l'application

app.post('/path', function(req, res){


var message = { 
  app_id: "5eb5a37e-b458-11e3-ac11-000c2940e62c",
  contents: {"en": "English Message"},
  included_segments: ["All"]
};

sendNotification(message);
});

Merci!

13
enrico_alvarenga

Je me demande s'il est possible de faire un appel externe API à l'intérieur du serveur express.

Bien sûr, vous pouvez contacter n'importe quel serveur externe à partir d'une application node.js avec http.request() comme vous le montrez ou l'un des modules de niveau supérieur construit en plus comme le module de demande .

Voici un exemple simple de la page d'accueil du module de demande:

const request = require('request');
request('http://www.google.com', function (error, response, body) {
  if (!error && response.statusCode == 200) {
    console.log(body) // Show the HTML for the Google homepage. 
  }
});

Ou, en utilisant des promesses:

 const rp = require('request-promise');
 rp('http://www.google.com').then(body => {
     console.log(body);
 }).catch(err => {
     console.log(err);
 });
14
jfriend00

vous pouvez utiliser le client Axios car Axios est un client HTTP basé sur Promise pour le navigateur ainsi que node.js.

L'utilisation de promesses est un grand avantage lorsqu'il s'agit de code qui nécessite une chaîne d'événements plus compliquée. L'écriture de code asynchrone peut prêter à confusion et les promesses sont l'une des nombreuses solutions à ce problème.

Installez d'abord Axios dans votre application en utilisant npm install axios --save

puis vous pouvez utiliser ce code

const axios = require('axios');

axios.get('api-url')
    .then(response => {
        console.log(response.data.status);
        // console.log(response.data);
        res.send(response.data.status);
    })
    .catch(error => {
        console.log(error);
    });
4
GUDDU RAJ

Veuillez essayer cette solution. je l'ai utilisé et cela a fonctionné pour moi.

var Request = require("request");

Request.get("http://httpbin.org/ip", (error, response, body) => {
    if(error) {
        return console.dir(error);
    }
    console.dir(JSON.parse(body));
});
1