2017-01-09 45 views
0

我正在學習Angular 2並且有一個有趣的問題。我正在使用json-server來模擬我的服務調用並很好地檢索工作。但是,我有創建和更新的問題。創建並更新JSON調用不起作用

我使用的基本模型稱爲通知它看起來像這樣: -

export class NotificationModel { 
constructor(
    public id: number, 
    public name: string, 
    public description: string 
){} 

}

這是我的基本功能沒有什麼太奇怪了!

createNotification(notification : NotificationModel) { 
    return this._http.post('http://{myurl}/notifications', JSON.stringify(notification)) 
     .map(res => res.json()); 
} 

updateNotification(notification : NotificationModel) { 
    return this._http.put('http://{myurl}/notifications/' + notification.id, JSON.stringify(notification)) 
     .map(res => res.json()); 
} 

當我嘗試在簡單的測試值,通過我,而不是得到如下: -

的創建產生在其他領域的ID並沒有什麼9字符的字母數字值。 這是我的目標: -

{"id":5,"name":"NEW NOTIFICATION","description":"NEW NOTIFICATION DESCRIPTION"} 

更新: - 下面是它創建

{ 
    "id": "rkxCLjZLx" 
} 

更新空白的其他兩個領域,只是不斷的id字段。 這裏是我的對象

{"id":"3","name":"Notification 3","description":"UPDATE DESCRIPTION"} 

更新: - 在這裏,更新後的記錄

{ 
    "id": "3" 
} 

這是一個JSON服務器的問題,或者是有什麼明顯的是我做錯了嗎?

UPDATE

這是我用來調用我的服務

addNotification(notification : NotificationModel) { 
    this._notificationService.createNotification(new NotificationModel(5, 
            'NEW NOTIFICATION', 'NEW NOTIFICATION DESCRIPTION')).subscribe(
     data => { 
      // refresh the list 
      this._notificationService.getNotifications().subscribe(res => { 
        this.notifications = res; 
       } 
      ); 
      return true; 
     }, 
     error => { 
      console.error("Error adding notification!"); 
      return Observable.throw(error); 
     } 
    ); 
} 

updateNotification(notification : NotificationModel) { 

    notification.description = 'UPDATE DESCRIPTION'; 

    this._notificationService.updateNotification(notification).subscribe(
     data => { 
      // refresh the list 
      this._notificationService.getNotifications().subscribe(res => { 
        this.notifications = res; 
       } 
      ); 
      return true; 
     }, 
     error => { 
      console.error("Error updating notification!"); 
      return Observable.throw(error); 
     } 
    ); 
} 
+0

您可以在創建新通知的位置發佈代碼嗎?你也可以澄清測試值,我很困惑什麼是預期與實際。 – shusson

+0

在我的問題中添加了更多信息 – Campey

+0

瀏覽器的開發人員工具中的網絡選項卡顯示了什麼http請求? – shusson

回答

0

發現我的問題的功能!

我沒有在任何地方設置內容類型!通過更新我的PUT和POST請求,它現在可以按預期工作。

createNotification(notification : NotificationModel) { 

    let body = JSON.stringify(notification); 
    let headers = new Headers({ 'Content-Type': 'application/json' }); 
    let options = new RequestOptions({ headers: headers });   

    return this._http.post(this.serviceURL, body, options) 
     .map(res => res.json()); 
} 

updateNotification(notification : NotificationModel) { 

    let body = JSON.stringify(notification); 
    let headers = new Headers({ 'Content-Type': 'application/json' }); 
    let options = new RequestOptions({ headers: headers }); 

    return this._http.put(this.serviceURL + '/' + notification.id, body, options) 
     .map(res => res.json()); 
}