我希望能够覆盖Sinatra中的get方法,但正常的ruby覆盖不起作用,这是我的代码:
require 'sinatra/base'
class WebApp < Sinatra::Base
def get
format = "url #{url} AT: #{Time.now}"
puts format
super
end
get "/" do
puts "hi"
end
run!
end
我可以访问&#34; /&#34; ,它会打印&#34; hi&#34;,但它不会从log_request打印格式,如何正确覆盖get方法?
答案 0 :(得分:2)
get
方法将一个路由处理程序添加到Sinatra应用程序中;它仅用于在启动期间构建应用程序。当应用程序启动并运行时,传入的HTTP请求不再调用get
,而是调用内部存储的proc。 (同样适用于post
等。)
根据您的描述,您看起来想要一个before
处理程序 - 在运行实际路径处理程序之前,将为每个传入的HTTP请求运行其内容。
因此,请尝试使用以下代码替换代码中的def get ... end
块:
before do
puts "URL: #{request.url} AT: #{Time.now}"
end
然后,如果您只想将传入的请求记录到控制台,最简单的方法是在类定义中说enable :logging
。在此处查看更多详细信息:http://www.sinatrarb.com/configuration.html