【问题标题】:POST request with a json body javascript带有 json 正文 javascript 的 POST 请求
【发布时间】:2016-09-29 22:31:54
【问题描述】:

我需要在正文中使用 json 对象发出 POST 请求。请求如下:

request({
        encoding: 'utf8',
        url: 'myUrl',
        json: true,
        method: 'POST',
        headers: {
            'Content-Type': 'application/json',
            'X-Auth-Token': ticket
        },
        json : JSON.stringify(eval("(" + str + ")"))
        }, function (error, response, body) {
            console.log(JSON.stringify(eval("(" + str + ")")))
            res.status(200).send('added')
            }
        )

请求没有做它应该做的事情。但是,如果我使用我通过 console.log 获得的 JSON.stringify 评估向 Postman 的相同 url 发出 POST 请求,它就可以工作。任何想法为什么?

【问题讨论】:

  • request 函数是什么?它来自哪里?
  • 当你有 JSON 对象可用时,你为什么要使用可怕的 eval() hack 来解析 JSON?
  • 您为什么只解析 JSON 以立即将结果重新编码为 JSON?
  • 请求没有做它应该做的事情。 — 那么它做什么呢?这与它应该做的有什么不同?
  • 请求什么也不做。不发布json。请求函数来自 node.js 请求模块。我以这种方式解析 JSON,因为我想用作 JSON 的字符串是这个:var str = "{ policyTag : '" + policyName+ "', networkDevices : [{ deviceId : '" + deviceId + "'}]}",所以我需要尊重语法。评估它会产生{"policyTag":"policyName","networkDevices":[{"deviceId":"699a2e94-3e37-43ef-a751-6845501c4061"}]},它在邮递员中工作。

标签: javascript json request


【解决方案1】:

为什么不直接

json: JSON.stringify(str)

忘记 eval() 函数,它不是必需的。 str 应该是一个 javascript 值,它将被转换为 JSON 字符串。

【讨论】:

  • 因为这会对结果进行双重编码。 json: str 会更有意义。
  • JSON 应该有这个合成器:{ "policyTag" : "x", "networkDevices" : [{ "deviceId" : "y" }] }
  • 我尝试了 json: str, json: JSON.stringify(str) 和 eval ,但没有一个工作。
  • 好吧,不知道 str 是什么,很难说。如果你问我,问题不完整。
  • 嗯,我只需要在请求json中获取上面提到的synthax。我发现自己被对象数组和“networkDevices”的值复杂化了。
猜你喜欢
  • 2013-05-30
  • 1970-01-01
  • 2015-08-14
  • 2016-09-24
  • 2015-12-02
  • 2019-02-11
  • 1970-01-01
  • 1970-01-01
  • 2019-12-13
相关资源
最近更新 更多