Sinatra 返回值
路由代码块的返回值至少决定了返回给 HTTP 客户端的响应体
,或者至少决定了在Rack堆栈
中的下一个中间件。大多数情况下,将是一个字符串,就像上面的例子中的一样。但是其他值也是可以接受的。
你可以返回任何对象,或者是一个合理的 Rack 响应,Rack body 对象或者 HTTP 状态码:
- 带有如下三个元素数组: [status (Fixnum), headers (Hash), response body (responds to #each)]
- 带有两个元素的数组: [status (Fixnum), response body (responds to #each)]
- 响应
each
方法,并且对于给定的块接受字符串参数的 ruby 对象 - 表示状态码的整数
那样,我们可以轻松的实现例如流式传输的例子:
class Stream
def each
100.times { |i| yield "#{i}\n" }
end
end
get('/') { Stream.new }
可以使用stream
辅助函数来减少 boiler plate(??) , 并在路径中内嵌流逻辑。
所以,学习技术果然还是要基础牢固,从底层开始,自下而上的构建技术体系。所以,Rack 到底是什么,其本身是如何模块化的 web 编程,很多事情都需要从概念上去把握。