隧道 AngularJs 请求在带有 Rails 的外部 API 中使用它们



有人知道如何向rails服务器执行委托extaral api请求,而不是在客户端以通用的方式执行这些请求吗?

这是为了避免客户端出现跨域请求所必需的(http://0.0.0.0:3000访问控制允许来源不允许。)

我发现了一种非常简单的方法来使用Globbing Routes!

在路由器中:

match "api/*url" => "tunnel_api#tunnel_request", via: [:all]

并创建控制器:

class TunnelApiController < ApplicationController
 def tunnel_request
   query_params_string = "?"
   params.each do |key, value|
     unless ((key == "controller") || (key == "action") || (key == "url"))
       query_params_string += key + "=" + value + "&"
     end
   end
   query_params_string = query_params_string[0..-2]
   uri = URI.parse("external_host_url_with_ssl" + params[:url] + query_params_string)
   http = Net::HTTP.new(uri.host, uri.port)
   http.use_ssl = true
   response = http.request(Net::HTTP::Get.new(uri.request_uri))
   render json: response.body, status: 200
 end
end

棘手的部分是如何在请求中包含查询参数,因此在这里您可以看到我用于创建query_params_string的循环。还记得处理不同的HTTP方法(POST、OPTIONS…)

我在我的博客中为此创建了一个帖子:http://blog.tcit.cl/post/112616639620/rails-and-angularjs-with-external-api

最新更新