2017-06-06 13 views
2

私はContentful管理ノードモジュールを使用し、JavascriptでContentfulプロジェクトを作成しています。 新しいエントリを含むエントリに参照を作成しようとしています。参照フィールドでコンテンツを更新しました

私は、ブラウザのコンソールに次のメッセージが表示されます:

 Uncaught (in promise) Error: { 
    "request": { 
"url": "https://api.contentful.com:443/spaces/59mi8sr8zemv/entries/2Bxpz2RgA4AQImQOssey8w/published", 
"headers": { 
    "Accept": "application/json, text/plain, */*", 
    "Content-Type": "application/vnd.contentful.management.v1+json", 
    "X-Contentful-User-Agent": "contentful-management.js/1.3.1", 
    "Authorization": "Bearer <my management-api key>", 
    "X-Contentful-Version": 373 
    }, 
    "method": "put", 
    "payloadData": null 
    }, 
    "status": 422, 
    "statusText": "Unprocessable Entity", 
    "requestId": "d00dde60cd564a8db84da90cd671b19f", 
    "message": "Validation error", 
    "details": { 
    "errors": [ 
    { 
    "name": "notResolvable", 
    "link": { 
     "id": "2Yfc2H8q9OSoOccGcSg4aU", 
     "linkType": "Entry", 
     "type": "Link" 
    }, 
    "path": [ 
     "fields", 
     "link", 
     "en-US", 
     7 
    ] 
    } 
] 
} 
} 
at errorHandler (main-addTrack.bundle.js:3096) 

私は新しいエントリがあるcontentfulウェブアプリに見えますが、下書きとして保存された場合。エントリを追加しようとしているエントリは、更新する必要があると言います。

これは私が新しいエントリを作成して更新するために使用する機能です。

function publishTrack(){ 
     //-- Creates the new track in events, with ref to korrekt date 
     client.getSpace(<my_spaceId>) 
      .then((space) => { 
      space.createEntry('events', newTrack) 
       .then(event => { 

       eventID = event.sys.id; 

       (entry) => entry.publish() 

       //This function is gets the entry of choosen date 
       space.getEntry(dateId) 
        .then((entry) => { 

        //Gets the ID from the newly created event 
        var newId = {sys: { 
         id: eventID, 
         linkType: "Entry", 
         type:"Link" 
        }} 

        //Creates a reference field in dates for show & do 
        entry.fields.link["en-US"].push(newId) 

        //update the event 
        return entry.update() 
        space.getEntry(eventID) 
        .then ((eventID) => entry.publish()) 

       }) 
        space.getEntry(dateId) 
        .then ((entry) => entry.publish()); 

      }) 

      publishModal.style.display = 'block'; 
      publishModal.style.opacity = '1'; 
      publishModal.style.pointerEvents = 'auto'; 
      publishModal.style.zIndex = '99999'; 

     }) 

    }//end publish track 

ご迷惑をおかけして申し訳ありません。これは私の最初の投稿です。

答えて

0

参考資料の1つが具体的にはfields.link["en-US"][7]に解決されていないように見えます(エラーメッセージの「パス」プロパティに注意してください)、イベントを作成する前に作成および公開されていることを確認してください。

+0

最初に参照フィールドを作成してからエントリを作成する必要がありますか?しかし、参照フィールドのエントリからIDが必要なときは、どのようにすればよいですか? – Sara

0

フードの下では、HTTP PUTリクエストをしています。これは、既存のリソースを新しいものに置き換えることを意味します。しかし、あなたのペイロードは空です:

"payloadData": null

と、あなたが送信しているペイロードが有効でないことを意味し、ユーザーのエラー4xxの(特に422)を取得します。つまり、Contentfulはその値をnullにすることを認めません。あなたがnullでないnewIdを追加しているので、しかし、それはちょっと変わったようです。

PUTで置き換えようとしているリソースは/fields/link/en-US/7です。一部の仲介リソースが存在しない場合があります(たとえば、/fields/fields/link、または/fields/link/en-US)。サブリソースのPUTはContentfulによって処理されません。

関連する問題