【问题标题】:reading parameters on Sinatra post在 Sinatra 帖子上读取参数
【发布时间】:2020-07-21 19:12:57
【问题描述】:

我正在开发我的第一个 Sinatra 应用程序,我很难从发布请求中获取参数。

我正在使用 MiniTest::Spec,我的规范看起来像

 payload = File.read("./spec/support/fixtures/payload.json")
 post "/api/v1/verify_payload", { payload: payload }, { "CONTENT_TYPE" => "application/json" } 
 last_response.body.must_eql payload

这是我的路线

namespace '/api/v1' do
  post '/verify_payload' do
    MultiJson.load(params[:payload])
  end
end

规范失败,因为last_response.body 为空。

我错过了什么吗?

我还尝试从 verify_payload 返回整个 params,但在这种情况下它也返回了一个空字符串。

更新

curl -X POST -H "Content-Type: application/json" -d '{"payload":"xyz"}' http://localhost:9292/api/v1/verify_payload

不返回任何内容,服务器日志上也没有错误

[2014-01-06 01:16:25] INFO  WEBrick::HTTPServer#start: pid=10449 port=9292
127.0.0.1 - - [06/Jan/2014 01:16:27] "POST /api/v1/verify_payload HTTP/1.1" 200 6 0.0220

谢谢

【问题讨论】:

  • 帖子应该被第三方服务调用。我不打算从 UI 调用它。
  • 您查看日志了吗?
  • 见上面的更新。谢谢
  • 您是否成功通过 GET 请求(或其他路线)?顺便说一句:programmers.stackexchange.com/questions/14293/… 阅读有关帕德里诺的评论。
  • 是的,GET 请求工作正常。 curl http://localhost:9292/api/v1/whatever 正确返回 from get request

标签: ruby json sinatra


【解决方案1】:

Sinatra 只是不解析这些数据,因为它们不是表单参数。

表单参数如下所示

curl -X POST 127.1:4567/ -d "foo=bar"

您可以使用 request.body.read 或 rack contrib 代替 params。

机架贡献

  1. gem install rack-contrib安装它
  2. 需要它

需要“机架”

需要“机架/贡献”

  1. 加载它use Rack::PostBodyContentTypeParser

有了这个,您可以像平常一样使用params 来处理 json 发布数据。像这样的:

curl -X POST -H "Content-Type: application/json" -d '{"payload":"xyz"}' 127.1:4567/

来源:Sinatra controller params method coming in empty on JSON post requesthttp://jaywiggins.com/2010/03/using-rack-middleware-to-parse-json/

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-21
    • 1970-01-01
    • 1970-01-01
    • 2020-10-20
    相关资源
    最近更新 更多