Node.js提取返回空数据

时间:2019-10-23 18:13:46

标签: node.js

我正在尝试使用fetch从API获取一些数据,并且控制台日志显示[],但是,当我使用Postman进行相同的请求时,它成功返回了JSON。我在做什么错了?

let fetch = require("node-fetch");

const url_deals = 'http://www.cheapshark.com/api/1.0/deals';

function getDealInfo(dealID){
    let new_url = new URL(url_deals + "?id=" + dealID);

    fetch(new_url, {method : 'GET'})
        .then(data =>{
            data.json().then(out => {
                console.log(out);
            })
        })
}

getDealInfo("X8sebHhbc1Ga0dTkgg59WgyM506af9oNZZJLU9uSrX8%253D");

Postman screenshot

3 个答案:

答案 0 :(得分:1)

您的ID显然被多次编码。如果我解码两次,我会得到:

<div class="block" data-hover-bg="#a30003">
<div>

并且,实际上是获取此数据。

$( ".block" ).mouseenter(function() {
    this.style.backgroundColor = this.dataset.hoverBg;
});

如此看来,您传递的ID值似乎不正确。您可以通过将getDealInfo("X8sebHhbc1Ga0dTkgg59WgyM506af9oNZZJLU9uSrX8="); 代码与基本URL { gameInfo: { storeID: '1', gameID: '93503', name: 'BioShock Infinite', steamAppID: '8870', salePrice: '29.99', retailPrice: '29.99', steamRatingText: 'Overwhelmingly Positive', steamRatingPercent: '95', steamRatingCount: '61901', metacriticScore: '94', metacriticLink: '/game/pc/bioshock-infinite', releaseDate: 1364169600, publisher: 'N/A', steamworks: '1', thumb: 'https://steamcdn-a.akamaihd.net/steam/apps/8870/capsule_sm_120.jpg?t=1568739647' }, cheaperStores: [ { dealID: 'fq0cNHiR3Z4TpZyV7WH865C1%2BCBlmufYUc%2Bu2HqyUHE%3D', storeID: '27', salePrice: '26.99', retailPrice: '29.99' } ], cheapestPrice: { price: '5.27', date: 1543553226 } } 一起使用来正常工作,这将返回JSON,确认node-fetch()代码工作正常,并且问题出在与您的http://www.cheapshark.com/api/1.0/deals值相同。

答案 1 :(得分:0)

问题出在您的身份证上。您已经逃脱了两次。

getDealInfo("X8sebHhbc1Ga0dTkgg59WgyM506af9oNZZJLU9uSrX8%253D");
您代码中的

Id为X8sebHhbc1Ga0dTkgg59WgyM506af9oNZZJLU9uSrX8%253D,但在屏幕截图中为X8sebHhbc1Ga0dTkgg59WgyM506af9oNZZJLU9uSrX8%3D。请看倒数第三位。

答案 2 :(得分:0)

使用该ID我也一无所获。

请注意,如果您不使用Optional.empty()进行请求,则ID与您的格式不匹配,例如

id

您似乎在某处进行了额外的URI编码。