【问题标题】:How do you post a Map to Phoenix using JSON?如何使用 JSON 将地图发布到 Phoenix?
【发布时间】:2017-01-11 09:56:08
【问题描述】:

我是 Elixir 1.3.2 和 Phoenix 1.2.1 的新手,在遵循 this 教程后,我正在尝试将用户对象(地图)发布到 phoenix。我正在使用邮递员和正确的网址http://localhost:4000/api/users。起初我尝试了一个带有 json 对象的原始正文,但后来我得到了一个缺少密钥的异常:预期的密钥“用户”出现在参数中,请发送预期的密钥或调整你的 scrub_params/2 调用

然后我在邮递员中使用 formdata 选项,键为:“用户”和值:“{电子邮件:“foo@bar.be”,密码:“s3cr3t”}”。这导致来自 elixir API 的以下错误响应:预期 params to be a map, got: "{email: \"foo@bar.be\", password: \"s3cr3t\"}"

谁能告诉我我做错了什么?以及如何确保 JSON 被序列化/匹配到地图?

【问题讨论】:

    标签: elixir phoenix-framework


    【解决方案1】:

    您需要发送到服务器的 JSON 需要类似于

    {
      "user": {
        "email": "foo@email.com",
        ...
      }
    }
    

    请注意顶层有一个用户密钥。这就是你的错误的意思

    预期的关键“用户”将出现在参数中

    【讨论】:

    • 您建议的格式无效。我收到错误消息:params 中出现预期的密钥“user”,请发送预期的密钥或调整您的 scrub_params/2 调用我需要使用 user:{"email":"foo@email.com","password" :"secret"} 但后来我得到:预期的参数是一张地图,得到:"{\"email\":\"foo@email.com\",\"password\":\"secret\"}"
    • 在开发模式下的每个请求,Phoenix 都会告诉你你的参数是什么。例如,我刚刚登录了我的一项服务,控制台显示Parameters: %{"_csrf_token" => "...", "_utf8" => "✓", "session" => %{"email" => "foo@email.com", "password" => "[FILTERED]"}}。在这种情况下,当我处理会话时,我的“会话”键位于顶层。您的参数列表是否在顶层有一个“用户”键?
    • 控制台是凤凰控制台而不是http请求中的json体?我的请求正文的根目录中有一个用户密钥
    • 我忘记了我的内容标题!所以你的答案是正确的。
    猜你喜欢
    • 2017-10-05
    • 1970-01-01
    • 2010-10-23
    • 2020-05-21
    • 2014-01-06
    • 2012-02-27
    • 2015-01-29
    • 1970-01-01
    相关资源
    最近更新 更多