我正在尝试向知识库发出POST请求.我可以在5-10%的时间内从请求中得到正确的答复.所有其他时间我从服务器返回标题中的错误:
No argument passed{“Error”:{“Code”:“BadArgument”,“Message”:“Request body Is Null or Empty.”}}
我有一种感觉这是由Node.js异步引起的,当请求通过时我的变量仍未定义.虽然,当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' });
解决方法
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。