模块化Sinatra应用程序,可全局设置错误处理和配置

到期

我正在使用Sinatra构建一个小的Ruby API,我想将一些错误和配置设置为在全局级别上起作用,这样我就不必在每个类的开头都设置它们。

我的结构是这样的:

content_api.rb

require 'sinatra/base'
require 'sinatra/namespace'
require 'sinatra/json'
require 'service_dependencies'
require 'api_helpers'
require 'json'

module ApiApp
  class ContentApi < Sinatra::Base

    helpers Sinatra::JSON
    helpers ApiApp::ApiHelpers
    include ApiApp::ServiceDependencies

    before do
      content_type :json
    end

    get '/' do
      content = content_service.get_all_content
      content.to_json
    end

    get '/audio' do
      package =content_service.get_type 'Audio'
      package.to_json
    end

    get '/video' do
      package =content_service.get_type 'Video'
      package.to_json
    end

    get '/document' do
      package =content_service.get_type 'Document'
      package.to_json
    end

  end
end

config.ru:

$LOAD_PATH.unshift *Dir[File.join(File.dirname(__FILE__), '/src/**')]
$LOAD_PATH.unshift *Dir[File.join(File.dirname(__FILE__), '/src/api/**')]

require 'content_api'
require 'package_api'
require 'utility_api'
require 'sinatra/base'


configure do
  set :show_exceptions => false
end

error { |err| Rack::Response.new([{'error' => err.message}.to_json], 500, {'Content-type' => 'application/json'}).finish }

Rack::Mount::RouteSet.new do |set|
    set.add_route ApiApp::ContentApi, {:path_info => %r{^/catalogue*}}, {}, :catalogue
    set.add_route ApiApp::PackageApi, {:path_info => %r{^/package*}}, {}, :package
    set.add_route ApiApp::UtilityApi, {:path_info => %r{^/health_check*}}, {}, :health_check
  end

当我运行它时,它将运行正常,但是当我强制执行500错误(关闭MongoDb)时,我得到了一个标准的html类型错误,内容为:

<p id="explanation">You're seeing this error because you have
enabled the <code>show_exceptions</code> setting.</p>

如果我添加

configure do
      set :show_exceptions => false
    end

    error { |err| Rack::Response.new([{'error' => err.message}.to_json], 500, {'Content-type' => 'application/json'}).finish }

在content_api.rb文件中,然后我想收到一个返回的JSON错误。但是,在构建此模块时,我不想在每个班级的顶部都重复自己。

有一种简单的方法可以使这项工作吗?

马特

最简单的方法是重新打开Sinatra::Base并在其中添加代码:

class Sinatra::Base
  set :show_exceptions => false

  error { |err|
    Rack::Response.new(
      [{'error' => err.message}.to_json],
      500,
      {'Content-type' => 'application/json'}
    ).finish
  }
end

不过,这可能不建议使用,如果您的应用程序包含其他非json模块,则会导致问题。

更好的解决方案可能是创建可以在模块中使用Sinatra扩展

module JsonExceptions

  def self.registered(app)
    app.set :show_exceptions => false

    app.error { |err|
      Rack::Response.new(
        [{'error' => err.message}.to_json],
        500,
        {'Content-type' => 'application/json'}
      ).finish
    }
  end
end

然后,您可以通过在模块中注册它来使用它:

# require the file where it is defined first
class ContentApi < Sinatra::Base
  register JsonExceptions
  # ... as before
end

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

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

错误处理程序不在模块化Sinatra应用程序中运行

来自分类Dev

Rails:可配置的可扩展模块化应用程序

来自分类Dev

mvc4全局错误处理模块化体系结构

来自分类Dev

使Sinatra Helpers仅在某些路由中可用(模块化应用程序)

来自分类Dev

在Sinatra模块化应用中设置RSpec

来自分类Dev

应用程序的C错误处理

来自分类Dev

模块化Shiny应用程序:CSV和图表模块

来自分类Dev

在模块化Java应用程序中配置ehCache的最佳实践

来自分类Dev

如何在模块化应用程序中处理通用类/接口?

来自分类Dev

在angular.js应用程序中全局进行错误处理的最佳方法是什么?

来自分类Dev

在angular.js应用程序中全局进行错误处理的最佳方法是什么?

来自分类Dev

如何使用函数、类和 req.pipe 模块化 Express 应用程序?

来自分类Dev

如何使用模块化闪亮应用程序读取、显示和下载 Excel

来自分类Dev

在自举的Firefox扩展中设置全局错误处理程序

来自分类Dev

使用Spring的模块化Web应用程序

来自分类Dev

无法模块化AngularJS应用程序

来自分类Dev

模块化WPF应用程序的框架?

来自分类Dev

在模块化应用程序中使用实体框架

来自分类Dev

模块化Express / Socket.io应用程序

来自分类Dev

套餐一非模块化的JavaFX应用程序

来自分类Dev

模块化闪亮应用程序中的ggplots对齐

来自分类Dev

如何模块化angularjs应用程序?

来自分类Dev

使用Spring的模块化Web应用程序

来自分类Dev

全局错误处理程序的控制器和操作

来自分类Dev

应用程序中的错误处理程序功能

来自分类Dev

如何配置moditect-maven-plugin以在模块化应用程序中使用自动值库?

来自分类Dev

WCF服务和客户端应用程序的错误处理

来自分类Dev

WCF服务和客户端应用程序的错误处理

来自分类Dev

Sass在React应用程序中被错误处理

Related 相关文章

  1. 1

    错误处理程序不在模块化Sinatra应用程序中运行

  2. 2

    Rails:可配置的可扩展模块化应用程序

  3. 3

    mvc4全局错误处理模块化体系结构

  4. 4

    使Sinatra Helpers仅在某些路由中可用(模块化应用程序)

  5. 5

    在Sinatra模块化应用中设置RSpec

  6. 6

    应用程序的C错误处理

  7. 7

    模块化Shiny应用程序:CSV和图表模块

  8. 8

    在模块化Java应用程序中配置ehCache的最佳实践

  9. 9

    如何在模块化应用程序中处理通用类/接口?

  10. 10

    在angular.js应用程序中全局进行错误处理的最佳方法是什么?

  11. 11

    在angular.js应用程序中全局进行错误处理的最佳方法是什么?

  12. 12

    如何使用函数、类和 req.pipe 模块化 Express 应用程序?

  13. 13

    如何使用模块化闪亮应用程序读取、显示和下载 Excel

  14. 14

    在自举的Firefox扩展中设置全局错误处理程序

  15. 15

    使用Spring的模块化Web应用程序

  16. 16

    无法模块化AngularJS应用程序

  17. 17

    模块化WPF应用程序的框架?

  18. 18

    在模块化应用程序中使用实体框架

  19. 19

    模块化Express / Socket.io应用程序

  20. 20

    套餐一非模块化的JavaFX应用程序

  21. 21

    模块化闪亮应用程序中的ggplots对齐

  22. 22

    如何模块化angularjs应用程序?

  23. 23

    使用Spring的模块化Web应用程序

  24. 24

    全局错误处理程序的控制器和操作

  25. 25

    应用程序中的错误处理程序功能

  26. 26

    如何配置moditect-maven-plugin以在模块化应用程序中使用自动值库?

  27. 27

    WCF服务和客户端应用程序的错误处理

  28. 28

    WCF服务和客户端应用程序的错误处理

  29. 29

    Sass在React应用程序中被错误处理

热门标签

归档