之前没有要插入的中间件:ActionDispatch :: Http :: Parameters(RuntimeError)

时间:2018-08-27 10:58:29

标签: ruby-on-rails ruby ruby-on-rails-4 ruby-on-rails-5

在我的Rails 5.2应用程序中,app/middleware文件夹中有以下中间件:

class CatchJsonParseErrors
  def initialize(app)
    @app = app
  end

  def call(env)
    begin
      @app.call(env)
    rescue ActionDispatch::Http::Parameters::ParseError => error
      raise error unless env['HTTP_ACCEPT']&.match(/application\/json/)

      error_output = "There was a problem in the JSON you submitted: #{error}"
      return [
        400, { "Content-Type" => "application/json" },
        [{ status: 400, error: error_output }.to_json]
      ]
    end
  end
end

在我的application.rb文件中,以下行:

config.middleware.insert_before(ActionDispatch::Http::Parameters, "CatchJsonParseErrors")

当我尝试启动我的应用程序时,它返回以下错误:

`assert_index': No such middleware to insert before: ActionDispatch::Http::Parameters (RuntimeError)

我该如何解决?

1 个答案:

答案 0 :(得分:0)

我真的没看到official Rails GuideGitHub rails repo上的ActionDispatch::Http::Parameters中间件。有一个模块ActionDispatch::Http::Parameters,它仅包含在ActionDispatch::Request类中。我猜到Rails(ActionDispatch)请求对象已经准备就绪,您就可以自由验证/调整它的参数了,好像这个地方就在ActionDispatch::RequestId中间件之后。