我正在建立对本地API的http发布请求,以存储新的葡萄酒瓶。 get方法工作正常,但发布仅执行任何操作。我的要求缺少什么吗?为什么您认为post方法调用保持沉默?
我的研究没有帮助,我唯一能找到的类似问题是this one,但从未得到回答。像这样this.httpClient.post<WineBatch>
指定类型没有帮助。
import { Storage } from '@ionic/storage'
import { WineBatch } from '../_models/WineBatch'
import { Injectable } from '@angular/core'
import { HttpClient } from '@angular/common/http'
import { ObservableResult } from '../_models/ObservableResult'
@Injectable()
export class WineBatchProvider {
private storage: Storage
private storageKey: string
private apiUrl: string
constructor(storage: Storage, private httpClient: HttpClient) {
this.storage = storage
this.storageKey = "batches"
this.apiUrl = 'http://192.168.0.171:8080/api/qns/'
}
//#region API
public refreshWineBatches() {
this.httpClient.get(this.apiUrl + 'wines').subscribe(result => {
let observableResult = new ObservableResult(result)
this.setWineBatches(observableResult.data)
})
}
public addWineBatch(data: any) {
console.log("Sending data")
this.httpClient.post(this.apiUrl + 'wines', { data: 'This should cause an error !' }).subscribe(res => {
console.log("got response !")
}, error => {
console.error("error")
})
console.log("Data sent !")
}
//#endregion
}
此代码至少应引发一个错误。两个console.log都被调用,但是即使等待超时也不会出错。在服务器端,日志(记录所有API调用)中的任何跟踪都没有错误。确实感觉this.httpClient.post()
完全出于某种原因而被忽略了。
修改
正如谢尔盖·梅尔(Sergey Mell)所问,这是“网络”标签中的screenshot(尚未允许在我的帖子中显示图片)。 xhr请求被立即取消,并且此错误会引起很多错误,不会引发任何异常。在这种情况下,该方法的调用方式并不是很真实,但是this question可能是正确的。
似乎angular忽略了中止事件。以下是Angular来源:https://github.com/angular/angular/blob/5.0.1/packages/common/http/src/xhr.ts 如果请求中止,返回的Observable不会通知订阅者。
但是现在我的问题是:为什么这个请求被取消了?
答案 0 :(得分:0)
我认为是因为您可能没有在书面要求中发送任何内容:请尝试以这种方式更改代码:
public addWineBatch(data: any) {
console.log("Sending data")
this.httpClient.post(this.apiUrl + 'wines', data, { observe: 'response' })).subscribe(res => {
console.log("got response !")
}, error => {
console.error("error")
})
console.log("Data sent !")
}