【问题标题】:angular2-rc1 http.post not working correctlyangular2-rc1 http.post 无法正常工作
【发布时间】:2016-08-24 19:40:08
【问题描述】:

我正在创建一个 angular2 应用程序,在该应用程序中,我在服务中使用 http 来使 POST 调用 mongoDB

当我第一次拨打POST 时,它工作正常,即条目已正确插入数据库,但当我第二次发送数据时,它没有被插入。

如果我在第一次插入后重新加载页面,那么它工作正常。

我做了一些调试,发现在第二次请求中我的req.body 是空白的。

这是我的代码:

page.service.ts

savePage(page: Object) {
    this.headers.append('Content-Type', 'application/json');
    let url = this.baseUrl+'/pm/pages/';      
    let data={};
    data["data"]=page;
    console.log(data); //this is printing both times correctly
    //on second request data is blank where as it works correctly for first time       
    return this.http.post(url, JSON.stringify(data),{headers: this.headers})
        .map((res: Response) => res.json()).catch(this.handleError);
}

这是我在节点服务中显示的 req.body 中的数据。

第一次请求

body:{ 
    data:{ 
        name: 'wtwetwet',
        desc: 'wetwetwetetwte',
        isPublic: true,
        createdBy: 'Bhushan'
    }
}

第二次请求

body: {}

任何输入?

【问题讨论】:

  • Google Chrome 版本 52.0.2743.116 m(64 位)..是浏览器问题吗?
  • 我猜不是。不知道是什么导致了这个问题。
  • 我的节点服务没有问题,因为我使用 Advanced Rest Client 对其进行了测试..它对于多个请求都可以正常工作。

标签: node.js mongodb angular typescript angular2-http


【解决方案1】:

它看起来更像是一个后端的东西。但是,您应该包含订阅此 http 调用的代码。

顺便问一下,你为什么使用 RC1? Angular 2 现在在 RC5 上。

【讨论】:

    【解决方案2】:

    我终于意识到,我的方法在每次被调用时都会设置 content-type。

    因此更改代码:

    savePage(page: Object) {
        this.headers.append('Content-Type', 'application/json');
        let url = this.baseUrl+'/pm/pages/';      
        let data={};
        data["data"]=page;           
        return this.http.post(url, JSON.stringify(data),{headers: this.headers})
        .map((res: Response) => res.json()).catch(this.handleError);
    }
    

    到:

    savePage(page: Object) {
        this.headers=new Headers();
        this.headers.append('Content-Type', 'application/json');
        let url = this.baseUrl+'/pm/pages/';      
        let data={};
        data["data"]=page;             
        return this.http.post(url, JSON.stringify(data),{headers: this.headers})
        .map((res: Response) => res.json()).catch(this.handleError);
    }
    

    为我做了诀窍。 实际上,在进行休息调用时,我们只需要设置一次标头,但在我的代码中它已经设置好了,因此创建新的标头对象帮助我清除了任何以前设置的配置。

    感谢大家的帮助。

    【讨论】:

    • 我得到了同样的错误,但已经只设置了一次标题。我正在使用rc4。有什么想法吗?
    猜你喜欢
    • 2017-04-30
    • 2018-02-18
    • 2017-10-06
    • 2023-03-12
    • 2016-03-23
    • 2017-09-10
    • 1970-01-01
    • 1970-01-01
    • 2020-04-12
    相关资源
    最近更新 更多