Sinatra 返回值

2023-12-19 16:14 更新

路由代码块的返回值至少决定了返回给 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 编程,很多事情都需要从概念上去把握。
以上内容是否对您有帮助:
在线笔记
App下载
App下载

扫描二维码

下载编程狮App

公众号
微信公众号

编程狮公众号