0

私はAngular 2を学んでおり、興味深い問題があります。json-server を使用してサービス呼び出しをモックし、正常に取得しています。ただし、作成と更新に問題があります。

私は次のような通知と呼ばれる基本モデルを使用しています:-

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());
}

簡単なテスト値を渡そうとすると、代わりに次のようになります:-

create は id に対して 9 文字の英数字の値を生成し、他のフィールドには何も生成しません。これが私のオブジェクトです:-

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

更新:-これが作成するものです

{
  "id": "rkxCLjZLx"
}

更新により、他の 2 つのフィールドが空白になり、id フィールドのみが保持されます。これが私のオブジェクトです

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

更新:-更新後の記録は次のとおりです

{
  "id": "3"
}

これはjson-serverの問題ですか、それとも私が間違っていることは明らかですか?

アップデート

サービスを呼び出すために使用する関数は次のとおりです

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);
         }
      );
}
4

1 に答える 1

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());
}
于 2017-01-10T02:21:29.753 に答える