【问题标题】:Why does Sinatra need to rewind the request body?为什么 Sinatra 需要回退请求正文?
【发布时间】:2014-12-10 03:49:48
【问题描述】:

我向 Sinatra 应用程序发出了 POST 请求。我注意到参数作为 StringIO 到达服务器。可以使用request.body.read 读取。但是,它只能读取一次。要再读一遍,我需要运行request.body.rewind(哈哈,Sinatra)。

为什么要这样设计?我可以看到这在流数据中很有用,但还有其他应用程序吗?

【问题讨论】:

标签: request sinatra


【解决方案1】:

参数可通过 params 哈希在 Sinatra 中使用。 request.body.readrequest.body.rewind 是 Rack 的一部分,它们实际上并没有在 Sinatra 中实现。过去我最常用的方式是当我将 Sinatra 严格用作 Web API 并序列化/反序列化我的有效负载时。

【讨论】:

  • 问题问为什么:我想阅读一个答案(我投票赞成这个问题)
  • 它是一个 IO 对象,它被缓冲到文件中,需要按照接收到的顺序读取,以便进行文件上传或流式传输等操作。此外,您还有可能已经读取主体的机架中间件层,因此您需要能够在需要时回到起点。一个表现良好的中间件会读取然后倒带。
猜你喜欢
  • 2012-06-08
  • 2013-08-19
  • 2013-03-19
  • 2011-10-04
  • 2016-10-30
  • 2014-04-02
  • 2016-10-06
相关资源
最近更新 更多