【问题标题】:Checking request body in Grape API在 Grape API 中检查请求正文
【发布时间】:2014-07-04 03:48:05
【问题描述】:

我的 Grape 端点中有这样一行来检查 POST 正文的内容,以提供测试端点:

return 'OK' if request.body.string == 'TEST'

在我笔记本电脑上的开发环境中,这工作得很好。但是,在我们的暂存和生产环境中,它会引发异常:

NoMethodError: undefined method `string' for #<Unicorn::TeeInput:0x0000000b0d0290>

据我所知,这与 Rack 有关,但我很惊讶地发现两个环境之间的中间件行为不同。我想知道那里是否有人遇到过这个问题并且可能有一个建议,因为我看到 Unicorn::TeeInput 似乎没有一种简单的方法来检查内容。我希望也许有一种“官方”方式可以直接访问 Grape 中的请求正文,但我还没有找到。

感谢您的任何想法。

【问题讨论】:

    标签: grape-api


    【解决方案1】:

    尝试使用env['rack.input'],它应该返回一个输入流(实际上是Rack::Lint::InputWrapper 或类似的),您可以从中读取请求正文:

    return 'OK' if env['rack.input'].gets.eql? 'TEST'
    

    我已经对此进行了测试,它可以在本地使用 WEBrick 和 Unicorn 运行。

    【讨论】:

    • 不错的一个——它对两者都有效,也适用于我的规格。更糟糕的是,规范在本地和 CircleCI 上通过,但一旦部署,代码就崩溃了。不幸的是 request.body 不会在 Web 服务器上返回相同的东西。感谢您的建议!
    猜你喜欢
    • 2015-01-14
    • 2016-02-14
    • 2021-12-06
    • 1970-01-01
    • 1970-01-01
    • 2019-03-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多