首页 文章

swagger编辑器生成不会POST的typescript客户端

提问于
浏览
0

我已经使用位于http://editor.swagger.io的Swagger编辑器生成了一个Angular2打字稿客户端 . 虽然POST endpoints 永远不会被发送到服务器,但API适用于所有非 POST 类型的api endpoints .

到达生成的typescript中的以下方法,并且 console.log 语句显示正在设置标头,尽管实际上没有POST到服务器 .

这表明 this.http.request 调用有问题 .

public snapshotsFoo (data: Array<number>, extraHttpRequestParams?: any ) : Observable<models.Snapshot> {
    const path = this.basePath + '/Snapshots/foo';

    let queryParameters = new URLSearchParams();
    let headerParams = this.defaultHeaders;
    headerParams.set("Content-Type", "application/json");
    // verify required parameter 'data' is not null or undefined
    if (data === null || data === undefined) {
        throw new Error('Required parameter data was null or undefined when calling snapshotsFoo.');
    }
    let requestOptions: RequestOptionsArgs = {
        method: 'POST',
        headers: headerParams,
        search: queryParameters
    };
    requestOptions.body = JSON.stringify(data);

    console.log('I am in foo', path, requestOptions);

    return this.http.request(path, requestOptions)
        .map((response: Response) => {
            if (response.status === 204) {
                return undefined;
            } else {
                return response.json();
            }
        });
}

我可以成功地使用swagger ui(http://0.0.0.0:5000/api/ui),POSTman和命令行中的 endpoints $ curl -X POST --header 'Content-Type: application/json' --header 'Accept: application/json' -d '[7,7,8]' 'http://0.0.0.0:5000/api/Snapshots/foo'

虽然,当我尝试使用生成的打字稿到达此 endpoints 时,没有任何内容发布到服务器并且不会抛出任何错误 .

2 回答

  • 0

    出于某种原因,http observable在实际发布之前收集了垃圾(从我所看到的) .

    我组件中的破碎情况:

    ...
    this.snapshotApi.snapshotsFoo([6,7,8]);
    ...
    

    我组件中的固定情况:

    ...
    let whocares = this.snapshotApi.snapshotsFoo([6,7,8]);
    
    whocares.subscribe(res => {
        console.log('i dont even');
    }
    

    随意评论一下到底发生了什么 . 邮寄到我的服务器现在有效 . 观察改变行为......

  • 0

    我也有这个问题,我无意中忘了订阅我的api电话 . 我从Rx documentation发现:

    Observable被称为“冷”Observable,如果它没有开始发射物品,直到观察者订阅它;如果Observable可以在任何时间开始发出物品,则它被称为“热”Observable,并且订户可以在其开始之后的某个时刻开始观察所发射物品的序列,从而错过了在订阅之前发射的任何物品 . .

    在这种情况下,HttpClient返回一个observable,它允许我们向序列添加更多动作,因此是一个'冷'可观察,只有在订阅时才会触发 .

相关问题