JavaScript请求响应类型

时间:2017-09-22 11:50:39

标签: javascript json http-post

我在关注HTTP请求主题的教程时遇到了问题。我无法获取代码来自动解析我对JSON的回复。这仍然是文本。虽然声明指定' json:true'这会将类型设置为json并进行解析。

教程:https://www.terlici.com/2015/04/28/couchdb-node-express.html

var request = require('request');

var url = 'http://127.0.0.1:5984/';
var db = 'js-express-librarytutorial/';
var id =  'document_id';

request.put(url + db);

request.put({
    url: url + db + id,
    body: {
        user: "Tom",
        message: "Document 2"
    },
    json: true
}, function(){request(url + db + id, function(err, res, body) {
        console.log(typeof (body));
        console.log(body);
        console.log(body.user + ' : ' + body.message);
    })
});

有没有人知道如何触发http-calls的自动解析。

2 个答案:

答案 0 :(得分:1)

尝试在json中发送requestData,如下所示:

using eBay.Service.Call;
using eBay.Service.Core.Sdk;
using eBay.Service.Util;
using eBay.Service.Core.Soap;

这可能会奏效。 我还没有权利对问题发表评论。否则我应该在评论中提出建议。因此,张贴作为答案。 如果它适合你,请告诉我。

答案 1 :(得分:0)

所以研究指出我的问题是由于我原始调用中的回调函数的范围和嵌套。

请求调用上的json: true参数将content-type设置为application / json。这自动利用了对任何返回数据的解析:

request({url: url+db+"1", method: 'get', json: true}, function(err, res, body) {
    if (err) {
        throw err;
    }
    console.log(typeof (body));
    console.log(body);
});

在此示例中,不需要解析并返回Object。

然而,当我将回调嵌套在具有单独请求调用的匿名函数中时,内容类型将恢复为text / *

使用匿名回调:

request.put(url + db, function(err, res, body){
    request.put({
        url: url + db + id,
        body: { user : "Tom", message: "Document"},
        json: true
    },function(){
        request(url+db+id,,  function(err, res, body){
            console.log(typeof (body));
            console.log(body);
        });
    });
});

这可以通过以下方式预防:

  • 在单独的请求调用中指定内容类型

示例:

request.get({...}, function(){request({url: url+db+id, method: "GET", json: true},  function(err, res, body){})}
  • 删除单独的请求调用并直接处理回调中的返回数据:

示例:

request({url: url+db+"1", method: 'get', json: true}, function(err, res, body) {...});