簡體   English   中英

Node.js http.request結果返回為變量

[英]Node.js http.request Results Back as Variable

所有,

我試圖弄清楚如何將node.js代碼中來自https.request的結果傳遞給變量。 我有一個https.request設置,可以將正確的信息正確地傳遞給SOAP API並獲得正確的響應。 我的最終目標是將https.request的輸出轉換成一個我可以使用Express調用的變量。

這是我的代碼塊。

HTML:

                <div class="row">
                <div class="col-md-12" class="pull-left">
                    <p> TEST </p>
                    <p>{{soapreply}}</p>
                </div>

JS:

  app.post('/cucmmapper/submit', function (req, res) {
// FORM - DATA COLLECTION
var cucmpub = req.body.cucmpub;
var cucmversion = req.body.cucmversion;
var username = req.body.username;
var password = req.body.password;
var authentication = username + ":" + password;
var soapreplyx = '';

// SOAP - BUILD CALL
var https = require("https");
var headers = {
  'SoapAction': 'CUCM:DB ver=' + cucmversion + ' listCss',
  'Authorization': 'Basic ' + new Buffer(authentication).toString('base64'),
  'Content-Type': 'text/xml; charset=utf-8'
};

// SOAP - AXL CALL
var soapBody = new Buffer('<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns="http://www.cisco.com/AXL/API/11.5">' +
  '<soapenv:Header/>' +
  '<soapenv:Body>' +
  '<ns:listCss sequence="?">' +
  '<searchCriteria>' +
  '<name>%</name>' +
  '</searchCriteria>' +
  '<returnedTags uuid="?">' +
  '<name>?</name>' +
  '<description>?</description>' +
  '<clause>?</clause>' +
  '</returnedTags>' +
  '</ns:listCss>' +
  '</soapenv:Body>' +
  '</soapenv:Envelope>');

// SOAP - OPTIONS
var options = {
  host: cucmpub, // IP ADDRESS OF CUCM PUBLISHER
  port: 8443, // DEFAULT CISCO SSL PORT
  path: '/axl/', // AXL URL
  method: 'POST', // AXL REQUIREMENT OF POST
  headers: headers, // HEADER VAR
  rejectUnauthorized: false // REQUIRED TO ACCEPT SELF-SIGNED CERTS
};

// SOAP - Doesn't seem to need this line, but it might be useful anyway for pooling?
options.agent = new https.Agent(options);

// SOAP - OPEN SESSION
var req = https.request(options, function (res) {
  res.setEncoding('utf8');
  res.on('data', function (d) {
    soapreplyx = d;
    console.log("Got Data: " + d);
  });
});

// SOAP - SEND AXL CALL
req.write(soapBody);
res.render('cucmmapper-results.html'), {
  'title': 'CUCM 2.1',
  'soapreply': soapreplyx
};
req.end();
req.on('error', function (e) {
  console.error(e);
});

}); }

“ console.log(“ Got Data:” + d)“行正在從API中獲得正確的預期答復,但是,我無法弄清楚如何將這些數據放入我的變量” soapreplyx“中,在Express中將其更改為“soapreply”。

非常感謝您提供的任何幫助!

在調用res.render()之前,您不必等待請求響應,因此soapreplyx的值始終為'' ,即其初始值。 若要更正此問題,請在傳遞給您的https.request()回調的響應對象上添加'end'事件偵聽器。

您沒有將響應的塊附加到soapreplyx變量上,而是在每個后​​續塊中重新分配了它的值。

let soapRequest = https.request(options, soapResponse => {
  soapResponse.on('data', chunk => {
    soapreplyx += chunk
  })

  soapResponse.on('end', () => {
    return res.render('cucmmapper-results.html', {
      title: 'CUCM 2.1',
      soapreply: soapreplyx
    })
  })
})

soapRequest.write(soapBody)
soapRequest.end()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM