Sinatra Route什么都不返回
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Sinatra Route什么都不返回相关的知识,希望对你有一定的参考价值。
我有一个非常简单的例子,其中sinatra只返回没有输出。程序输入if子句但块未完成,因此没有任何内容发送到机架,没有任何内容发送到浏览器......不是单个字符。
require 'sinatra'
get '/' do
var='confirmed'
if var == 'confirmed'
'Confirmed'
end
if var == 'declined'
'Declined'
end
end
现在的问题是:通常会采用“返回”还是“下一步”的方式?随着它,它的运行...但我从来没有在网络中找到一个必须使用下一个声明的例子...... 那么,“if logic”通常是在其他地方,并且在路径的末尾只有一个erb:xyz吗?我很迷惑...
这与Sinatra的工作方式无关,真的。这更像是Ruby问题。据Sinatra readme说:
路由块的返回值至少确定传递给HTTP客户端的响应主体,或至少确定Rack堆栈中的下一个中间件。最常见的是,这是一个字符串,如上例所示。但其他价值观也被接受。
您的代码中的问题是您的上一个if
本身就是一个声明。如果你的var
变量不是"declined"
,那么if
块的计算结果为nil
,因为它是你的路径块中的最后一个值,这就是Sinatra返回的值。
当你使用显式return
时,你没有到达第二个if
并且没有这个问题,这就是为什么它适用于显式返回。
您不需要像这样使用if/elsif
块进行显式返回:
# This is one single statement that would return either confirmed or declined
# Request will always return a non-nil value
get '/' do
...
if var == 'confirmed'
'Confirmed'
elsif var == 'declined'
'Declined'
end
end
或者case/when
块:
# This is one single statement that would return either confirmed or declined
# Request will always return a non-nil value
get '/' do
...
case var
when 'confirmed' then 'Confirmed'
when 'declined' then 'Declined'
end
end
你有答案。您总是需要将一些东西发送到机架以获得响应。
你可能有一个视图显示状态,然后你在最后添加这样的东西(你可以有多个erb块只为每个路由添加一个erb调用):
get '/' do
var='confirmed'
if var == 'confirmed'
st = 'Confirmed'
end
if var == 'declined'
st = 'Declined'
end
erb :myViewName, :locals => {:status => st}
end
或者只是像这样使用return
,如果您的响应只是一个字符串。请注意,此return
之后的所有内容都未执行:
if var == 'confirmed'
return 'Confirmed'
end
以上是关于Sinatra Route什么都不返回的主要内容,如果未能解决你的问题,请参考以下文章
使用 ruby、Sinatra 和 Mandrill 如何从 api 调用访问单个元素并打印为 HTML?