node.js - Dojo请求写入[object Object]请求

标签 node.js rest post dojo

我有一个请求如下:

request.post("/webappbuilder/rest/layerGroups/" + this.appId + "/save", {
                data: {groupInfo: this.groupInfo},
                headers: {
                }
            }).then(function (r) {
                console.log("The server returned: " + r);
                context.setting.destroyLayerSelector();
                context.setting.createGroupableLayerSelector(this.groupInfo);
                context._promptSaved();
            });

当我查看服务器端日志时,我发现该对象被接受为 {"groupInfo":"[object Object]"}。它将 [object Object] 写入我的 this.groupInfo 对象。

我应该怎么做才能让服务器接受该变量作为 json 对象?

最佳答案

当您提供一个对象作为data 属性时,dojo 假定您希望将数据作为常规 HTML 表单参数发送到服务器。这些参数只是简单的键=值对的列表。

因此,如果您希望一个这样的值成为对象的 JSON 表示形式,则必须执行以下操作(请注意 JSON.stringify):

request.post("/webappbuilder/rest/layerGroups/" + this.appId + "/save", {
    data: {groupInfo: JSON.stringify(this.groupInfo)},
    headers: {...}
}).then(...

但是,这实际上意味着 groupInfo 会像这样发送到服务器:

groupInfo=%7B%22id%22%3A32%2C%22name%22%3A%22Group1%22%7D

在您的服务器上,您可能会看到类似以下内容:

 {"groupInfo": "{id:32,name:\"Group1\"}"}

所以你看,该值仍然只是一个字符串!请记住,HTTP 参数只是键=值对。在这里,键是 groupInfo,值是一个恰好包含 JSON 的字符串(但 HTTP 不知道这一点,因此您必须在应用程序中自己解析它)。

但是,POST 请求不必是无聊的键=值对。请求正文只是文本,因此我们可以在其中放置任何内容:XML、JSON,等等。我们可以通过 Content-Type header 告诉服务器该格式是什么。如果您的 Web 应用程序后端框架很聪明,它可能会检查 header 并将请求正文解析为一个对象。

request.post("/webappbuilder/rest/layerGroups/" + this.appId + "/save", {
    data: JSON.stringify( {groupInfo: this.groupInfo} ),
    headers: {"Content-Type": "application/json"}
}).then(...

请注意,这里我们已经移动了 JSON.stringify 调用,以便它包含整个数据对象。这意味着data属性实际上是一个字符串,dojo将直接使用它作为请求主体。我们还提供了 Content-Type header 作为 Web 服务器的线索。

如果您不提供 Content-Type header ,dojo 将发送默认的“application/x-www-form-urlencoded”,即使您的请求正文不包含 key=value 对。

关于node.js - Dojo请求写入[object Object]请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48627393/

相关文章:

node.js - 最新的 npm 版本在 Linux 中不起作用

java - xml 响应不起作用,但 json 正在使用 Jersey 运行 Rest Api

java - 在 JAX-RS 中的每个 @POST 或 @DELETE 请求之前或之后调用方法

python - 如何访问 POST 请求中嵌入的键值

node.js - Node 中的 req.body 为空

node.js - 我正在使用 Windows 10,我似乎无法在我的终端上使用设置 nodejs 上的环境变量

node.js - vuejs 2 axios 放置,删除

node.js - res.redirect 在 Passport 谷歌回调中被调用两次 - 我无法追踪为什么

Rest API 设计 PUT 与 PATCH

CURLOPT_POSTFIELDS CURL post图像文件,C语言