2017-03-28 7 views
1

私はScaphold.ioサービスでApolloを使用しています。そのサービスにBLOBを書き込むために、リクエスト本体にオプションを追加する必要があります。Apollo GraphQLリクエストにリクエストボディの値を追加するには?

フルScapholdの例では、ここで見つけることができます:https://scaphold.io/docs/#uploading-files

しかし、それはこのようなものが行われます。

form.append("variables", JSON.stringify({ 
    "input": { 
    "name": "Mark Zuck Profile Picture", 
    "userId": "VXNlcjoxMA==", 
    "blobFieldName": "myBlobField" 
    } 
})); 
// The file's key matches the value of the field `blobFieldName` in the variables 
form.append("myBlobField", fs.createReadStream('./mark-zuckerberg.jpg')); 

fetch("https://us-west-2.api.scaphold.io/graphql/scaphold-graphql", { 
    method: 'POST', 
    body: form 
}).then(function(res) { 
    return res.text(); 
}).then(function(body) { 
    console.log(body); 
}); 

それがリクエストボディにblobFieldを追加します。これに基づき

は、私は変数にblobFieldNameプロパティを渡す必要があり、その後、リクエストボディにブロブとそのプロパティに渡された値を追加します。ただし、Apolloを使用すると、リクエストボディに追加することはできません。私は次のことを試しましたが、ネットワークの検査官をチェックインするとリクエストボディにはありません。

export const withCreateCoverPhoto = graphql(CreateCoverPhoto, { 
    props: ({mutate}) => ({ 
    createCoverPhoto: (name, file) => mutate({ 
     variables: { 
     input: { 
      blobFieldName: name, 
     }, 
     }, 
     [name]: file 
    }), 
    }), 
}); 

ご連絡ください。

答えて

1

ありがとうございます。現在、ファイルをアップロードする最も良い方法は、[FormDataにファイルを追加し、フェッチを使用してサーバーに送信する](https://medium.com/@danielbuechele/file-uploads-with-graphql-and-apollo-5502bbf3941e)です。基本的には、ファイルそのものをキャッシュすることはできませんが、これは、マルチパートリクエストを使ってScapholdでファイルをアップロードする処理に最適な方法です。

関連する問題