Próbuję wysłać żądanie POST do bazy wiedzy. Mogę uzyskać prawidłową odpowiedź z prośby może 5-10% czasu. Wszystkie pozostałe czasy pojawia się błąd w tytule z serwera:Treść żądania POST jest pusta lub pusta
No argument passed{“Error”:{“Code”:“BadArgument”,“Message”:“Request body Is Null or Empty.”}}
mam wrażenie, jest to spowodowane przez node.js będąc asynchronicznej i moja zmienna pozostaje niezdefiniowana, gdy żądanie przechodzi. Chociaż, jak to możliwe, gdy req.write()
zawiera zmienną? Może mogę wprowadzić opóźnienie, aby upewnić się, że zmienna jest zdefiniowana przed wysłaniem żądania?
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'
});
Czy jesteś pewny, że twoja sesja nie ma wartości NULL? Czy możesz konsoli.logować swoje 'postData', aby to sprawdzić. Twój kod wydaje się dość prosty, nie można znaleźć przyczyny błędu. – Sigma
Tak, konsola.log (postData) działa idealnie. Nie jestem do końca pewny, dlaczego mogę wypytać moje wyniki w porządku, a potem spróbować ponownie i nie działa to 15 razy, kiedy go wypróbuję. –
Czy to możliwe, że API ogranicza stawkę żądań? Czy Twoje zachowanie może być reprodukowane z listonoszem lub innym klientem? – Sigma