2017-07-13 19 views
5

मैं ज्ञानबेस को POST अनुरोध करने का प्रयास कर रहा हूं। मैं अनुरोध से 5-10% अनुरोध से सही प्रतिक्रिया प्राप्त कर सकता हूं। सभी दूसरी बार मैं सर्वर से वापस शीर्षक में त्रुटि मिलती है:POST अनुरोध निकाय शून्य या खाली

No argument passed{“Error”:{“Code”:“BadArgument”,“Message”:“Request body Is Null or Empty.”}} 

मुझे लगता है इस Node.js के कारण होता है async किया जा रहा है और मेरे चर जब अनुरोध के माध्यम से चला जाता है अभी भी अनिर्धारित रहता है। हालांकि, यह कैसे हो सकता है जब req.write() चर शामिल है? हो सकता है कि अनुरोध भेजने से पहले वैरिएबल को परिभाषित करने के लिए देरी हो सकती है?

var https = require('https'); 

var resData = ""; 

var options = { 
    host: "westus.api.cognitive.microsoft.com", 
    port: 443, 
    path: "/qnamaker/v2.0/knowledgebases/<kb-key>/generateAnswer", 
    method : 'POST', 
    headers: { 
     'Content-Type': 'application/json', 
     "Ocp-Apim-Subscription-Key":"<sub-key>", 
    }, 
}; 

bot.dialog('qnaReq', function (session, args) { 
    //call QnA Bot and ask that bot the question 
var req = https.request(options, function(res) { 

    res.on('data', function (chunk) { 
     resData += chunk; 
    }); 

    res.on('error', function(e) { 
    console.log('problem with request: ' + e.message); 
    }); 

    res.on('end', function() { 
     if (resData.length != 75) { //75 is the length of the error I get almost every time. This line prevents the application from crashing since I am trying to access values that won't be there. 
     var accessibleData = JSON.parse(resData); 
     session.send(accessibleData["answers"][0]["answer"]); 
     } else { 
      session.send("No argument passed" + resData); 
     } 
     resData = ""; 
    }); 
}); 

    var postData = {question: session.message.text}; 
    console.log(postData); //postData is defined 

    req.write(JSON.stringify(postData)); 
    req.end(); 

}).triggerAction({ 
    matches: 'IT Help' 
}); 

console results

enter image description here

+0

क्या आप वाकई अपना सत्र शून्य नहीं है? क्या आप इसे जांचने के लिए अपने 'postData' को कंसोल कर सकते हैं। आपका कोड बहुत सरल लगता है, यह नहीं मिल सकता कि क्या गलत हो सकता है। – Sigma

+0

हाँ, console.log (postData) पूरी तरह से काम करता है। मुझे बिल्कुल यकीन नहीं है कि मैं अपने परिणामों को ठीक से क्यों पूछ सकता हूं और फिर इसे फिर से प्रयास करें और यह अगले 15 बार काम नहीं करता है, मैं कोशिश करता हूं –

+0

क्या यह संभव है कि एपीआई अनुरोध दर को सीमित करे? क्या आप इस व्यवहार को डाकिया या किसी अन्य ग्राहक के साथ पुन: उत्पन्न कर सकते हैं? – Sigma

उत्तर

0

यह रूप में उल्लेख किया here मुद्दा हो रहा है।

के रूप में उल्लेख here

0

आपका कोड सही लगती है Content-Length हैडर का उपयोग करने का प्रयास करें। आप http.request() का उपयोग करके एक अनुरोध जारी करते हैं और req.write() और req.end() (ध्यान दें कि आप लिखने के भाग को छोड़ सकते हैं और केवल req.end(data)) कर सकते हैं।

मुझे लगता है कि कुंजी यहाँ क्या डेटा जब आप req.write() करने के लिए होता है:

वर POSTDATA = {प्रश्न: session.message.text};

क्या आप सुनिश्चित हैं कि session.message.textundefined नहीं है? क्योंकि यदि यह है, तो postData{ question: undefined } होगा, जो स्ट्रिंग '{}' बन जाता है।

संबंधित मुद्दे