【问题标题】:API post call returns error but works on postmanAPI post调用返回错误但适用于邮递员
【发布时间】:2019-09-25 18:38:26
【问题描述】:

我有一个工作 Angular 项目,它使用 webapi2 连接到真实数据。目前我正在开发一个 express.js 项目,该项目为了演示目的而模拟数据,所以我不会使用真正的 webapi2,而是使用这个总是显示随机数据的 express 项目。角度项目调用一个需要 json 对象的 post api。但是调用总是返回错误。但是当使用邮递员调用它时它正在工作。

代码:

角度分量

onSubmit(valid: boolean = false): void {
...
this.service.save(request).subscribe(
  result => {
    console.log(result,"RHAILHYDRA");
    ...
  },
  error => {
    console.log(error,"EHAILHYDRA");
    ...
  })
}

角度服务.ts

public save(param: any): Observable < any > {
    let uri = "some url";
    let payLoad = {
        "someId": param.id,
        "someComment": param.comment
    };
    let headers = new HttpHeaders({
        'If-None-Match': param.tag
    });
    return this.http.post <any> (uri, payLoad, {
        headers: headers
    });
}

uri 总是http://localhost:44309/demo/5b42/trade?valid=false

因为它是一个模拟,所以我没有考虑查询。因此 api 调用将在有/没有查询的情况下工作。

express.js 代码

var bodyParser = require('body-parser');
exports.register = function (app) {
  app.use(bodyParser.json());
  app.use(bodyParser.urlencoded({ extended: true }));
  app.post('/demo/:id/trade', function (req, res) {
    res.status(200).json({
      "validationMessages": [],
      "overridable": true
    });
  });
};

当我单击提交按钮时,它总是出现错误“EHAILHYDRA”。

但是当我使用邮递员时,我得到了预期的结果。

任何线索都会非常有帮助。

更新 #1:

当我点击提交时,inspect:network 中没有调用此服务。

【问题讨论】:

  • 你能在角度组件中评论this.handleResponse(result)吗?我认为handleResponse方法有问题。
  • this.handleResponse() 需要从 post 调用返回的 json 对象。这是第二个错误。
  • 你能给我看看你的handleResponse method吗,如果你能给出你的回复就太好了
  • handleresponse method 没什么问题,它只需要一个 json 对象,我没有从 post 调用中得到它。错误请参见图 1,预期响应请参见图 2。我可以评论处理程序响应,但我仍然收到错误
  • 你能不能把node_module删掉重新安装。

标签: angular express


【解决方案1】:

当您的标头值为空或未定义时,可能会出现此问题。所以删除标题我的意思是'If-None-Match': param.tag 部分,然后再试一次。


public save(param: any): Observable < any > {
    let uri = "some url";
    let payLoad = {
        "someId": param.id,
        "someComment": param.comment
    };
   let httpOptions = {
      headers: new HttpHeaders({ 'Content-Type': 'application/json' })
    };
    return this.http.post <any> (uri, payLoad, httpOptions);
}

【讨论】:

  • 我以前试过这个,但没有用。伙计,我快要在这个键盘上敲我的头了:(
  • 是的,这就是问题所在,呼叫本身不在网络选项卡中。但我在控制台中收到错误。
  • 当我们的标头值为空或未定义时,可能会出现此问题。好的,让我们做一件事,删除标题,我的意思是 'If-None-Match': param.tag 部分,然后再试一次,让我知道最终结果。
  • COOL :) 标题有问题
【解决方案2】:

尝试在validationMessages 上添加一些check,不管它是否有价值。

不要直接使用validationMessages

可能存在validationMessages未定义的情况,而您使用该变量来调用一些预定义的数组函数。

【讨论】:

  • 我尝试在使用 validationMessages 的地方评论 this.handleResponses。但服务调用本身仍然返回错误路径。
猜你喜欢
  • 2021-12-17
  • 2019-01-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-05-06
  • 1970-01-01
相关资源
最近更新 更多