无法通过本地开发服务器上的角度2中的HTTP POST发布数据

时间:2017-03-23 09:02:32

标签: mysql django angular

我是网络开发的新手,并试图让我的第一个应用程序使用Angular 2.我有一个被动的表单,我正在构建一个样本发票,其中包含标题和项目信息。当我尝试将数据发布到同一网络中另一台机器上托管的数据库中时,我在Observable运算符Map上发现了一些错误"[Exception: TypeError: 'caller' and 'arguments' are restricted function properties and cannot be accessed in this context. at Function.remoteFunction (<anonymous>:2:14)]/

以下是代码: 为简单起见,我创建了一个变量sampleInvoice,其中包含服务器可接受的预格式化JSON结构。 我已尝试使用REST扩展程序为Chrome发布此数据,它工作正常。

invoice.service.ts

import { Injectable } from '@angular/core';
import { Observable } from 'rxjs/Observable';
import { of }         from 'rxjs/observable/of';
import 'rxjs/add/operator/delay';
import { Http, Headers, RequestOptions,Response, RequestMethod} from '@angular/http';
import { Invoice, invoices } from './invoice';

    createInvoice(invoice: Invoice): Observable <Invoice>{
    let sampleInvoice = {
    "invoiceDate":"2017-03-21",
    "mobileNumber": 8297088993,
    "salesPerson": "Ramesh",
                "paymentMode": "CASH",
                "numOfItems": 1,
                "grossAmount": "2100.00",
                "totalDiscount": "200.00",
                "totalTax":"100.00",
                "netAmount": "2000.00",    
                "paidAmount": "2000.00",
                "items": [
                            {
                                "lineItem": 1,
                                "productBarcode": "product1",
                                "quantity": 1,
                                "itemGrossAmount":"1200.00",
                                "itemDiscount": "50.00",
                                "itemTax":"50.00",
                                "itemNetAmount":"1200.00"
                            },
                            {
                                "lineItem": 2,
                                "productBarcode": "product2",
                                "quantity": 2,
                                "itemGrossAmount":"400.00",
                                "itemDiscount": "50.00",
                                "itemTax":"50.00",
                                "itemNetAmount":"800.00"
                            }
        ]
    }
    let headers = new Headers({"Content-Type": "application/json"});

    console.log(headers);
    console.log(JSON.stringify(sampleInvoice));

    return this.http.post("http://192.168.0.9:8000/api/invoice/create/",JSON.stringify(sampleInvoice),{headers})
                              .map(res => res.json());
}

注意:服务器(django和mySQL)托管在上述URL的另一台计算机上。 我们非常感谢您解决此问题的任何帮助。

此致 纳文

1 个答案:

答案 0 :(得分:1)

问题结果与我写Observable的方式有关。我错过的是我没有订阅响应,而是使用catch操作符响应。由于没有订阅,Observable被标记为Cold并且没有提出任何网络请求。这是createInvoice的更新代码片段

return this.http.post(this.invoiceUrl+"create/",bodyString,options)
                          .map((res:Response) => res.json())
                          .subscribe((res)=>{
                              if (res){
                                  console.log(res);
                                  return res
                                }});