クエリの例:
mutation register {
register(
input: {
email: $email
avatar: $avatar
password: $password
}
) @rest(type: "Register", path: "auth/register", method: "POST")
}
フォームには、Fileオブジェクトを送信するファイル入力があります(これはアバタープロパティです)。 アバター変数をログに記録すると、このプロパティが定義されていることがわかりますが、apollo-link-restを使用してデータを送信すると、ファイルオブジェクトは空になります。
ミューテーションを送信する前に変数をログに記録します。
apolloを介してサーバーにデータを送信する場合、オブジェクトは空です。
ドキュメントにファイルのアップロードについての言及が見つからなかったので、それが可能かどうかはわかりません。
Fileオブジェクトのマングリングに関連するいくつかのバグを修正する必要があったため、これは可能だと思います。
そうは言っても、react-nativeでApollo-link-restを使用しているため、最近はこれを使用していません。
これをデバッグし、なぜ機能しないのかを理解するには、ソースを一読する必要があるかもしれません。 実際の修正は、Apollo-link-restではなくApollo-clientにある可能性があります。
返信いただきありがとうございます! 私は主に、有効にする必要のある設定や、追加する必要のあるリンクなど、明らかな何かが欠落していないことを確認したかった:slightly_smiling_face:
たとえば、通常のapolloでファイルをアップロードするには、apollo-upload-client(https://github.com/jaydenseric/apollo-upload-client)が必要であると言う人がいます。
同様のリンクをapollo-link-restのクライアントに追加する必要があるかどうかわかりませんか?
いいえ、それはここでは当てはまりません。
つい最近7月に、誰かがapollo-link-restを使用したreactファイルのアップロードの例を投稿しました。
多分これは役立ちますか?
https://github.com/apollographql/apollo-link-rest/issues/200#issuecomment -509287597
あなたがそれを理解したなら、多分私たちはこれを行う方法についてのドキュメントセクションを書くべきです!
どうもありがとう@fbartho!
その問題は問題の解決に役立ちました。私がしなければならなかった重要な変更は、ファイルエンコードメソッドをbodySerializers
追加すること
bodySerializers: {
fileEncode: (data: any, headers: Headers) => {
const formData = new FormData()
formData.append('file', data, data.name)
headers.set('Accept', '*/*')
return { body: formData, headers }
}
}
また、クエリでシリアライザーを指定する部分もあります
@rest(
type: "File"
path: "YOUR_API_URL"
method: "POST"
bodySerializer: "fileEncode"
) {
このようなものがドキュメントにあると非常に役立ちます。 再度、感謝します!