【问题标题】:Error when calling a an API from JavaScript but not from Postman从 JavaScript 但不是从 Postman 调用 API 时出错
【发布时间】:2018-01-13 12:57:59
【问题描述】:

我正在用 express 编写一个网络应用程序,其中一个资源通过一个 API 公开,其端点位于“api/tone”上。 API 只是 Watson 服务之一的包装器,但我不直接调用它们,以免在前端进行所有身份验证和有效负载构建。 API 本身运行良好,因为当我尝试使用 POSTMAN 访问它时,它会正确响应。

POSTMAN 请求信息:

POST:本地主机:3000/api/tone

标题:“content-type”:“application/x-www-form-urlencoded”

Body:“text”:“国王是个可爱的小伙子。他让我觉得我和家人回到了家。”

Postman request

此请求完全按预期工作。

该应用只是展示其他功能的原型,因此它不使用任何类型的身份验证。

Javascript 请求

当我尝试从前端调用 API 时出现问题。

function sendRequest(text) {
    var payloadToWatson = {};
    payloadToWatson.text = text;

    var xhttp = new XMLHttpRequest();
    xhttp.onreadystatechange = function() {
        console.log(this.responseText);
        if (this.readyState == 4 && this.status == 200) {
            console.log(this.responseText);
        }
    };
    xhttp.open("POST", messageEndpoint, true);
    xhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
    xhttp.send(JSON.stringify(payloadToWatson));
}

在这里我收到一个 POST 错误请求错误。当我在后端记录错误时,这会消失:

{"code":400,"sub_code":"C00007","error":"No text given","x-global-transaction-id":"ffea405d5a5a00dd017a0dbb"}

我 99% 确定问题出在前端 API 调用程序中,否则 POSTMAN 请求将无法工作,但我仍然无法找到如何使其工作。

【问题讨论】:

    标签: javascript node.js watson


    【解决方案1】:

    问题是您发送的不是相同的东西。使用邮递员,您不会发送 json。

    只需发送text 而不进行字符串化:

    xhttp.send({text: text});
    

    【讨论】:

      【解决方案2】:

      好的,我终于成功了。我的意思是使用 POSTMAN code 工具。而不是将要分析的数据作为 JS 对象或字符串化 JSON 发送:

         var payloadToWatson = {};
         payloadToWatson.text = text;
         ...
         xhttp.send(JSON.stringify(payloadToWatson));
      

      我必须在参数和值之间使用等号创建一个字符串:

         var data = "text=" + text;
         xhttp.send(data);
      

      现在完美运行。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-07-30
        • 2022-06-13
        • 2021-09-27
        • 2019-04-27
        • 1970-01-01
        • 1970-01-01
        • 2021-03-28
        相关资源
        最近更新 更多