Из документации мне кажется, что следующее должно работать. Но это не так. Документы плохи для написания промежуточного программного обеспечения. Вместо этого кто-нибудь может оказать некоторую помощь.
# 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>'
Попробуйте conn.use
вместо conn.request
. Он пытается найти промежуточное ПО MyMiddleware в Faraday :: Request.
@technoweenie У нас должна быть лучшая документация по регистрации промежуточного программного обеспечения. Недавно мне пришлось сделать это здесь, и мне пришлось прочитать код, чтобы понять, как это сделать.
@jwaldrip Если вы зарегистрировали свое промежуточное ПО, вы могли бы сказать conn.request
.
Если бы вы зарегистрировали свое промежуточное ПО, вы могли бы сказать conn.request.
Кроме того, вы должны использовать символ, с которым вы зарегистрировались, а не имя класса. Символы используются только как ярлык для включения полного имени класса. conn.request(:json)
в основном совпадает с Faraday::Request::JSON
.
У нас должна быть лучшая документация по регистрации промежуточного программного обеспечения.
: +1: Я оттолкнулся, потому что планировал полностью изменить систему промежуточного программного обеспечения.
@jwaldrip Правильно, это плохой пользовательский опыт. Он закомментировал строку, которая регистрирует промежуточное ПО под сокращением символа, но продолжал использовать conn.request
setter, который, как мне кажется, работает только с сокращениями символов. Следовательно, промежуточное ПО найти не удалось.
Мы должны подумать, как это улучшить или, по крайней мере, получить более четкое сообщение об ошибке.
У меня все заработало, потребовалось некоторое время. Сообщите мне, могу ли я вообще помочь с документацией или доработкой промежуточного программного обеспечения.
Как выглядела ваша окончательная установка? @jwaldrip
Было ли что-нибудь написано по этому поводу? Я не смог найти ничего полезного, и несколько минут пришлось ломать голову, чтобы понять это.
@stefansedich не уверен, было ли какое-либо прямое продолжение или улучшение после этого обсуждения, но мы планируем проделать большую работу над документацией вместе со следующим основным выпуском (1.0), так что, надеюсь, это не будет проблемой в будущем снова.
Было бы здорово, если бы кто-нибудь опубликовал, как именно сейчас выглядит регистрация в этом выпуске.
@maxim Теперь у нас есть официальный веб-сайт с некоторой документацией по промежуточному программному обеспечению , но она все еще улучшается.
Короче говоря, request
и response
следует использовать только для зарегистрированного промежуточного программного обеспечения, если вам нужно внедрить специально созданное, проще всего вызвать .use
.
Итак, в приведенном выше примере будет работать следующее:
client = Faraday.new do |conn|
conn.use MyMiddleware, foo: :bar
end
Полный простой пример будет иметь большое значение для документации.
@maxim Теперь у нас есть официальный веб-сайт с некоторой документацией по промежуточному программному обеспечению, но она все еще улучшается.
Короче говоря, запрос и ответ следует использовать только для зарегистрированного промежуточного программного обеспечения, если вам нужно внедрить специально созданное, проще вызвать .use.
Итак, в приведенном выше примере будет работать следующее:client = Faraday.new do |conn| conn.use MyMiddleware, foo: :bar end
@iMacTia Этого нет в документации, но это очень важно. Возможно, это могло быть в https://lostisland.github.io/faraday/middleware/custom
@wilsonsilva, вы совершенно правы, это определенно будет хорошим улучшением 😅. Я удивлен, что это было упущено, если честно
Самый полезный комментарий
Полный простой пример будет иметь большое значение для документации.