带有法拉第的 Rails 应用程序:在没有 url 参数的情况下重构 Faraday::new() 时出现问题

我正在重构由多个微服务组成的 Rails 应用程序中的一些代码。faraday_middleware宝石用于服务之间的通信。

我设法取代多次打电话给Faraday::new()在不同的辅助程序文件与一个单一的调用Faraday::new()一个在ServiceConnectionHelper模块。所有这些替代调用有一个url参数:Faraday.new(url: url)

但是还有两段非常相似的代码我想去掉。在这种情况下,没有url参数。这是旧的(工作)代码:

# This code calls the connection function below
def create(resource)
  params = {
    resource_id: resource.to_param,
    version: resource.version,
    file: Faraday::UploadIO.new(resource.file.path, resource.mime_type.to_s, resource.file.original_filename)
  }

  res = connection(resource.authorization).post(foobar_url, params)
  return res.body['id'] if [200, 201].include?(res.status)
  raise UploadError, res.body['error']
end

# connection function
def connection(authorization_header = nil)
  Faraday.new do |conn|
    conn.use FaradayMiddleware::FollowRedirects, limit: 5
    conn.request :multipart
    conn.request :url_encoded
    conn.use FaradayMiddleware::ParseJson, content_type: 'application/json'
    conn.adapter Faraday.default_adapter
    conn.headers['Accept'] = 'application/json'
    conn.headers['Authorization'] = authorization_header unless authorization_header.nil?
  end
end

这是我想改用的代码。由于create函数内部错误,它不起作用。当我抓住它,记录它,e.inspect只是#<UploadError: Please specify a file>

# Small change only: Te other service's url is computed in the ServiceConnectionHelper module
def create(resource)
  params = {
    resource_id: resource.to_param,
    version: resource.version,
    file: Faraday::UploadIO.new(resource.file.path, resource.mime_type.to_s, resource.file.original_filename)
        }

  # This is were the error happens
  res = connection(resource.authorization).post('/', params)
  return res.body['id'] if [200, 201].include?(res.status)
  raise UploadError, res.body['error']
end

# connection function calls the new helper module now
def connection(authorization_header = nil)
  ServiceConnectionHelper.connection('foobar', authorization_header)
end

# the new module
module ServiceConnectionHelper
  class << self
    def connection(service, oauth_token = nil)

      url = service_url(service)

      Faraday.new(url: url) do |conn|
        conn.use FaradayMiddleware::FollowRedirects, limit: 5
        conn.request :url_encoded
        conn.adapter Faraday.default_adapter
        conn.request :multipart
        conn.use FaradayMiddleware::ParseJson, content_type: 'application/json'
        conn.headers['Accept'] = 'application/json'

        conn.headers['Authorization'] = oauth_token if oauth_token
      end
    end

    private

    def service_url(service)
      url = case service
      when 'foobar' then 'foobar_url_as_a_string'
      # the same for other services  
      end

      url
    end
  end
end

我能做些什么,以使ServiceConnectionHelper在这种情况下工作?

克里斯蒂安·布鲁克迈尔

你的第一个例子,秩序相比request变化:

conn.request :url_encoded
conn.request :multipart

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

法拉第(Faraday)在调用应用程序API之一时随机引发错误“ SSL_write ::在初始化时关闭”

如何在没有应用程序的情况下使用 Eddystone Url 信标实现物理网络

通过带有Devise的Rails 5帐户模型创建用户时出现问题

使用带有锚的功能home_url()时出现问题

带有Angular路由的Expressjs路由在加载直接URL时出现问题

将 Phoenix 应用程序部署到 Gigalixir 时出现问题:“没有名为 [email protected] 的文件”

Android Studio无法在没有强制转换的情况下构建,但是应用程序在强制转换时崩溃了

在没有Internet连接的情况下与WCF服务通信时Windows Phone应用程序崩溃

尝试在没有控制器的情况下浏览目录时,在MVC应用程序中禁止403

没有应用程序ID的情况下如何访问默认应用程序?

Axios-在没有实际请求的情况下获取带有参数的URL

在Windows下使用带有SSH密钥文件的GIT时出现问题

在现有的Android应用程序中集成Flutter模块时出现问题

在Mac上运行某些应用程序时出现问题,没有错误消息

默认情况下,Rails 应用程序如何单独与 Puma 一起运行 - 没有 Web 服务器

在我的Rails应用程序中为用户创建汽车时出现问题

如何在不使用表单的情况下从Rails应用程序发布到外部URL

如何在没有参数的情况下将 WordPress URL 重定向到基本 URL

推送到heroku时,Ruby on Rails应用程序不断崩溃,日志中没有信息

Testcafe:有没有办法添加多个文本作为 Selector().withText(text) 的输入 - 当应用程序支持多语言时出现问题

带有Entity Framework Core的.NET控制台应用程序:仅当在没有调试的情况下启动时,“该进程没有程序包标识”

在角度应用程序中添加Azure AD身份验证(带有MSAL)时,CORS出现问题

有什么方法可以在没有应用程序登录的情况下跟踪应用程序购买中的用户

当我在vue应用程序的URL中更改:id参数时,为什么在按Enter键时页面没有重新加载?

在没有游标PL / SQL的情况下重构代码

如何在没有电子打包程序的情况下更改电子应用程序图标?

javax.net.ssl.SSLHandshakeException:没有可协商的密码套件(严重错误:80:包装应用程序数据时出现问题)

在向现有应用添加南方时出现问题

在旋转带有图形的UIView时出现问题