无法访问葡萄中间件

时间:2015-05-12 07:28:47

标签: api grape

这里使用Grape write API函数。我想要限制API(API速率限制)。

LIB /葡萄/扩展/ grape_extension.rb

module Grape
  module Extension
    module ThrottleExtension
      def throttle(options={})
        route_setting :throttle, options
        options
      end
      Grape::API.extend self
    end
  end
end

LIB /葡萄/中间件/ throttle_middleware.rb

module Grape
  module Middleware
    class ThrottleMiddleware < Grape::Middleware::Base
      def before
        binding.pry
      end
    end
  end
end

LIB / grape_throttle.rb

require 'grape'
require 'grape/extensions/throttle_extension'
module Grape
  module Middleware
    autoload :ThrottleMiddleware, 'grape/middleware/grape_middleware'
  end
end

最后,在config/application.rb

require File.expand_path('../../lib/grape_throttle', __FILE__)
config.middleware.use Grape::Middleware::ThrottleMiddleware

并且,当我使用rails s运行并调用api时,binding.pry已调用。

[1] pry(#<Grape::Middleware::ThrottleMiddleware>)> env['api.endpoint']
=> nil

我想知道如何在Grape中间件中访问env ['api.endpoint']?

2 个答案:

答案 0 :(得分:0)

您可以通过::

访问env

endpoint = @env["api.endpoint"]

我在非rails应用程序中尝试了这个并且它有效。 您将获得变量中api端点的所有详细信息。

答案 1 :(得分:0)

我意识到这已经有几年历史了,但是今天我们在生产中遇到了这个问题,这是因为标头中的“内容类型”未设置为“ application / json”。对照您发送的请求进行检查。

我无法弄清楚为什么,但是我也能够在use :<middleware_name>中注释掉我们的Grape::API,我立即从葡萄中间件中得到了"error": "The requested content-type 'text/plain' is not supported."