此代码返回URL而不是数据时出现问题

时间:2019-12-30 13:34:20

标签: javascript node.js api

var http = require('http');
var xml2js = require('xml2js');
var parser = xml2js.Parser({
    explicitArray: false
});

var goodreadsService = function () {
    var getBookById = function (id, cb) {
        var options = {
            host: 'www.goodreads.com',
            path: '/book/show/656?format=xml&key={my developer key}'
        };
        var callback = function (response) {
            var str = '';
            response.on('data', function (chunk) {
                str += chunk;
            });
            response.on('end', function () {
                console.log(str);
                parser.parseString(str,
                    function (err, result) {
                        cb(null,
                            result.GoodreadsResponse.book);
                    });
            });
        };
        http.get(options, callback).end();
    };
    return {
        getBookById: getBookById
    };
};

module.exports = goodreadsService;

此代码返回一个链接

html正文您是一个href http://www.goodreads.com/book/show/656.War_and_Peace“重定向了一个正文

代替其中的xml数据。 我不为什么?

1 个答案:

答案 0 :(得分:0)

通常,多个回调样式使事情变得非常混乱。您可以使用promise或async / await样式。它将使代码更简洁,更易于理解。看这个

var got = require("got");
var xml2js = require("xml2js");
var parser = xml2js.Parser({ explicitArray: false });

async function getById(id) {
  const response = await got("https://goodreads.com/book/show/656?format=xml&key=somekey");
  const json = await parser.parseStringPromise(response.body);
  return json;
}

希望这会有所帮助。