REST API Power BI — ошибка: подключение: превышено ограничение в 5 сокетов

Здравствуйте, уважаемые эксперты PBI REST API, буду признателен за любую поддержку по следующему вопросу. Попытка отправить данные из MongoDB Atlas в набор данных Power BI Push через Rest API. Однако я столкнулся со следующей проблемой: когда я делаю более 5 HTTP-запросов к PBI Rest API, он говорит 'Error: connect: exceeded the limit of 5 sockets'. Я нашел следующую ссылку на этом веб-сайте, однако похоже, что решение там не найдено: Закрыть соединение сокета в request.js

      function postDataToPowerBi(result) {
...    
              collection.findOne({"_id": item._id}).then(itemDoc => {
                postOne(itemDoc, access_token);
              });
...
  }
      
  function postOne(itemDoc, access_token){

      var postData = JSON.stringify({
          "rows": [
            {
              "Name": itemDoc.Name,
              "name.1": itemDoc.name
            }
          ]
      });
      
      // request option
      var options = {
        host: 'api.powerbi.com' ,
        port: 443,
        method: 'POST',
        path: '/v1.0/myorg/groups/' + group_id + '/datasets/' + dataset_id + '/tables/' + table_name + '/rows',
        headers: {
          'Content-Type': 'application/json',
          'Authorization': 'Bearer ' + access_token,
          // 'Content-Length': postData.length,
          'Connection': 'Close'
        }
      };
      // request object
      var req = https.request(options, function (res) {
        var result = '';
        res.on('data', function (chunk) {
          result += chunk;
        });
        res.on('end', function () {
          console.log(res.statusCode);

        });
        res.on('error', function (err) {
          console.log(err);
        });
      });
      
      // req error
      req.on('error', function (err) {
        console.log(err);
      });
      
      req.on('close', function () {
        console.log("request closed");
      });
      
      //send request witht the postData form
      req.write(postData);
      req.end();
  }

1 ответ

Нашел объяснение поставленному вопросу. Power BI имеет максимум 5 ожидающих запросов строк POST на набор данных для push-наборов данных. Больше информации здесь: https://docs.microsoft.com/en-us/power-bi/developer/embedded/push-datasets-limitationsСледовательно, единственный и гораздо лучший подход — размещать строки сразу, а не построчно. Пример ниже:

      function postBulk(docs, access_token, firstRun){
      
      if(firstRun){
        deleteRows(access_token);
      }
      
      var postData = '{"rows": ' + JSON.stringify(docs) + '}';
      
      // console.log(postData);
      
      // request option
      var options = {
        host: 'api.powerbi.com' ,
        port: 443,
        method: 'POST',
        path: '/v1.0/myorg/groups/' + group_id + '/datasets/' + dataset_id + '/tables/' + table_name + '/rows',
        headers: {
          'Content-Type': 'application/json',
          'Authorization': 'Bearer ' + access_token,
          // 'Content-Length': postData.length,
          // 'Connection': 'Close'
        }
      };
      // request object
      var req = https.request(options, function (res) {
        var result = '';
        res.on('data', function (chunk) {
          result += chunk;
        });
        res.on('end', function () {
          console.log("postBulk: " + res.statusMessage);

        });
        res.on('error', function (err) {
          console.log("postBulk: " + err);
        });
      });
      
      // req error
      req.on('error', function (err) {
        console.log("postBulk: " + err);
      });
      
      // req.on('close', function () {
      //   console.log("request closed");
      // });
      
      //send request witht the postData form
      req.write(postData);
      req.end();
  }
Другие вопросы по тегам