2017-06-28 10 views
2

ノード内のjson-serverによって提供されているjsonファイルに対してPOST操作を実行しようとしています。フェッチを使用してネイティブで反応してPOSTリクエストを実行できません

ポスト操作は次の通りである「例外TypeError:Function.createIdで未定義 のプロパティを読み取ることができません 『ID』」:言っPOST操作を実行しようとしたとき、私は、次の500エラーが発生します

pushState =() => { 
     var update = { 
      "a": 1, 
      "b": 2 
     }; 

    return fetch(url, { 
     mode: 'cors', 
     method: 'POST', 
     headers: { 
     'Accept': 'application/json', 
     'Content-Type': 'application/json', 
     }, 
     body: JSON.stringify(update) 
    }) 
    .then((response) => { 
     console.log(response); 
     response.text(); 
    }) 
    .then((responseData) => { 
     console.log("Response:",responseData); 
    }).catch((error) => { 
     console.log(error); 
    }) 
    .done(); 
    } 

私はPOST要求を正しく受け付けていますか?

編集:非同期を追加した後とは、私はまだ同じエラーを取得してい待つ:ここ

pushState = async() => { 
    var update = { 
    "a": 1, 
    "b": 2 
    }; 

    var result = await fetch(url, { 
    mode: 'cors', 
    method: 'POST', 
    headers: { 
     'Accept': 'application/json', 
     'Content-Type': 'application/json', 
    }, 
    body: JSON.stringify(update) 
    }) 
    .then((response) => { 
    console.log(response); 
    return response; 
    }) 
    .catch((error) => { 
    console.log(error); 
    }); 

    return result; 
} 
+1

私はそれがサーバーの問題かもしれないと思います。 'var update = {id:1、a:1、b:2};' –

+0

IDフィールドが追加されました! IDフィールドが必要な理由はありますか?呼び出し元のAPIにidフィールドがないか、別の名前のIDフィールドがある場合はどうなりますか? –

+1

私は、あなたがjson-serverを使用していると信じています。設定されている方法はIDを探すことです。なぜなら、「TypeError:Function.createIdで未定義のID 'プロパティを読み取れません。すべてのAPIがIDを必要とするわけではありませんが、データをよりよく追跡するためにIDを使用することをお勧めします。 –

答えて

2

2つの問題:

  1. あなたはfetchから何かを返されていません。
  2. fetchは非同期です。今すぐ結果を返すpushStateと呼んでいるところでは、あなたがエラーになったときにほとんどの場合、undefinedが返されます。 async/awaitを使用してpushStateと書く必要があります。コメントに答えるために

編集:

あなたは、関数矢印構文を使用しているので、pushState非同期を行うには、次のようになります。

pushState = async() => { /* code */ } 

あなたはfetch作品が、私は読書をお勧めします方法を理解するのに役立ちますthis first。そして、高レベルでasync/awaitを理解するには、this articleを読んでください。結果のコードは次のようになります。

pushState = async() => { 
    var update = { 
    "a": 1, 
    "b": 2 
    }; 

    var result = await fetch(...) // Remember to return something. 

    return result; 
} 
+0

だから私はそれを "非同期pushState()"にしたいと思いますか?そして、私はどのように待っていますか? –

+0

@BillyBobJoelあなたの質問にうまく答えるために編集されました。 –

+0

私は更新されたコードを追加しました。私はまだ同じエラーが発生しています。問題が私がjsonファイルを提供している方法である可能性がありますか? –

関連する問題