Menurut saya dari dokumentasi bahwa yang berikut ini harus berfungsi. Tapi tidak. Dokumennya buruk untuk menulis middleware. Sebagai gantinya, seseorang dapat meminjamkan bantuan.
# play.rb
require 'faraday'
class MyMiddleware
attr_reader :options
def initialize(app, options={})
<strong i="6">@app</strong> = app
<strong i="7">@options</strong> = options
end
def call(env)
@app.call(env)
end
end
# This doesn't seem to work either, removing for now.
# Faraday.register_middleware :request, my_middlware: lambda { MyMiddleware }
client = Faraday.new do |conn|
# conn.request :my_middleware, foo: :bar
conn.request MyMiddleware, foo: :bar
end
response = client.get('http://jasonwaldrip.com/')
$ ruby play.rb
/Users/jwaldrip/.rbenv/versions/1.9.3-p484/lib/ruby/gems/1.9.1/gems/faraday-0.8.9/lib/faraday.rb:64:in `lookup_middleware': MyMiddleware is not registered on Faraday::Request (RuntimeError)
from /Users/jwaldrip/.rbenv/versions/1.9.3-p484/lib/ruby/gems/1.9.1/gems/faraday-0.8.9/lib/faraday/builder.rb:146:in `use_symbol'
from /Users/jwaldrip/.rbenv/versions/1.9.3-p484/lib/ruby/gems/1.9.1/gems/faraday-0.8.9/lib/faraday/builder.rb:100:in `request'
from play.rb:19:in `block in <main>'
from /Users/jwaldrip/.rbenv/versions/1.9.3-p484/lib/ruby/gems/1.9.1/gems/faraday-0.8.9/lib/faraday/connection.rb:65:in `initialize'
from /Users/jwaldrip/.rbenv/versions/1.9.3-p484/lib/ruby/gems/1.9.1/gems/faraday-0.8.9/lib/faraday.rb:11:in `new'
from /Users/jwaldrip/.rbenv/versions/1.9.3-p484/lib/ruby/gems/1.9.1/gems/faraday-0.8.9/lib/faraday.rb:11:in `new'
from play.rb:18:in `<main>'
Coba conn.use
alih-alih conn.request
. Itu mencoba mencari middleware MyMiddleware di Faraday::Request.
@technoweenie Kita harus memiliki dokumentasi yang lebih baik tentang cara mendaftar middleware. Saya baru-baru ini harus melakukannya di sini dan harus membaca kode untuk mengetahui caranya.
@jwaldrip Jika Anda telah mendaftarkan middleware Anda, Anda akan dapat mengatakan conn.request
.
Jika Anda telah mendaftarkan middleware Anda, Anda akan dapat mengatakan conn.request.
Juga, Anda harus menggunakan simbol yang Anda daftarkan, bukan nama kelas. Simbol hanya ada sebagai jalan pintas untuk memasukkan nama kelas lengkap. conn.request(:json)
pada dasarnya sama dengan Faraday::Request::JSON
.
Kita harus memiliki dokumentasi yang lebih baik tentang cara mendaftar middleware.
:+1: Saya membatalkannya karena saya berencana untuk sepenuhnya mengubah sistem middleware.
@jwaldrip Benar bahwa ini adalah pengalaman pengguna yang buruk. Dia mengomentari baris yang mendaftarkan middleware di bawah simbol steno, tetapi terus menggunakan setter conn.request
yang menurut saya hanya berfungsi dengan steno simbol. Oleh karena itu middleware tidak dapat ditemukan.
Kita harus berpikir bagaimana memperbaikinya, atau setidaknya memiliki pesan kesalahan yang lebih baik.
Saya membuatnya bekerja, butuh waktu. Beri tahu saya jika saya dapat membantu dengan dokumentasi atau pengerjaan ulang middleware.
Seperti apa tampilan akhir Anda? @jwaldrip
Apakah pernah ada sesuatu yang ditulis di sekitar ini? Saya tidak dapat menemukan sesuatu yang berguna dan harus memukul kepala saya selama beberapa menit untuk mengetahuinya.
@stefansedich tidak yakin apakah ada tindak lanjut atau peningkatan langsung setelah diskusi ini, tetapi kami berencana untuk melakukan beberapa pekerjaan berat pada dokumentasi bersama dengan rilis besar berikutnya (1.0) jadi semoga ini tidak menjadi masalah di masa depan lagi.
Akan lebih bagus jika seseorang memposting seperti apa sebenarnya pendaftaran dalam masalah ini untuk saat ini.
@maxim Kami sekarang memiliki situs web resmi dengan beberapa dokumentasi seputar middleware , namun masih berkembang.
Singkatnya, request
dan response
hanya boleh digunakan untuk middleware terdaftar, jika Anda perlu menyuntikkan yang dibuat khusus lebih mudah untuk memanggil .use
.
Jadi dalam contoh di atas, berikut ini akan berfungsi:
client = Faraday.new do |conn|
conn.use MyMiddleware, foo: :bar
end
Contoh sederhana yang lengkap akan sangat membantu untuk dokumentasi.
@maxim Kami sekarang memiliki situs web resmi dengan beberapa dokumentasi seputar middleware, namun masih berkembang.
Singkatnya, permintaan dan respons hanya boleh digunakan untuk middleware terdaftar, jika Anda perlu memasukkan yang dibuat khusus lebih mudah untuk memanggil .use.
Jadi dalam contoh di atas, berikut ini akan berfungsi:client = Faraday.new do |conn| conn.use MyMiddleware, foo: :bar end
@iMacTia Itu tidak ada dalam dokumentasi tetapi ini penting. Mungkin bisa di https://lostisland.github.io/faraday/middleware/custom
@wilsonsilva Anda benar sekali, itu pasti akan menjadi peningkatan yang bagus . Saya terkejut itu dilewatkan untuk bersikap adil
Komentar yang paling membantu
Contoh sederhana yang lengkap akan sangat membantu untuk dokumentasi.