在Nativescript应用程序中的服务器上发送http.patch请求

时间:2016-11-01 11:33:12

标签: http angular typescript patch nativescript

我正在尝试在Nativescrpt(Typescript + Angular2)应用程序中的服务器上发送http.patch请求。后端是用Python(Django)编写的

这是我的要求

  updateOrder(id, message) {
  let headers = new Headers();
  headers.append("Authorization", "Token " + Config.token);
  headers.append("Content-Type", "application/json");
  return this.http.patch(
      Config.apiUrl + "orders/" + id + "/",
      message,
      {headers: headers}
  )
  .map(response => response.json())
  .catch((res: Response) => this.handleErrors(res));

在这里我发送它。

changeStatus(status){
    var message = JSON.stringify({status: status});
    this.orderService.updateOrder(this.order.id, message).subscribe(
        data => console.log(data),
        err => alert(JSON.stringify(err))
    );
}

但是服务器会返回这样的数据:

{"_body":{},"status":200,"ok":true,"statusText":"","headers":{},"type":3,"url":null}

我希望改变的财产“状态”保持不变。

我做错了什么?

2 个答案:

答案 0 :(得分:0)

您可以使用NativeScript中的 http 模块。

发送PATCH应该类似于以下示例:

page.ts(TypeScript示例)

  import * as http from"http";
  http.request({
      url: "https://httpbin.org/patch",
      method: "PATCH",
      headers: { "Content-Type": "application/json" },
      content: JSON.stringify({ MyVariableOne: "ValueOne", MyVariableTwo: "ValueTwo" })
  }).then(response => {
      var result = response.content.toJSON();
      console.log(result);
  });
}

HTTP模块的API参考:https://docs.nativescript.org/api-reference/modules/http.html

此处的文档文章:https://docs.nativescript.org/cookbook/http#post-json

答案 1 :(得分:0)

这是我在需要发出http请求时所做的事情:

1.-在Root App NgModule中导入NativeScript http模块:

import { NativeScriptHttpModule } from "nativescript-angular/http";
...
@NgModule({
  imports: [
      ...
      NativeScriptHttpModule,
      ...
  ],
  declarations: [AppComponent],
  bootstrap: [AppComponent]
})

2.-将Angular http(和标题,如果需要)导入组件:

import { Http, Headers } from '@angular/http';

3.-在构造函数中注入它:

constructor(private http: Http, ...) { ... }

4.-使用http方法(即在这里POST,但可以使用任何方法):

var url = "http://www.api-url.com/example.php";
var body = {foo: "foo", bar:"bar"};
let headers = new Headers();
headers.append("Authorization", token); //You can append any header you need
headers.append("Content-Type", "application/json");
this.http.post(url, body, { headers: headers })
    .map(res => res.json())
    .subscribe(
        data => this.connectionEstablished(data),
        err => this.handleErrors(err)
    );

如果您使用方法 map()出现任何错误,则需要添加以下行:

import "rxjs/add/operator/map";

希望它有所帮助!