首页 > 解决方案 > 在 http get 方法中获取奇怪的 json 格式 - nodejs/express

问题描述

我正在尝试从 keepa 获取数据 - 我得到了一种奇怪的 JSON 格式,任何 JSON 扩展都无法读取。在邮递员中,请求工作得很好,我得到了可读的 JSON。我在这里想念什么?

const express = require("express");
const https = require("https");
const decompressResponse = require("decompress-response");
const bodyParser = require("body-parser");

const app = express();

app.use(bodyParser.urlencoded({extended: true}));

app.get("/", function(req, res){

res.sendFile(__dirname + "/index.html");
});

app.post("/", function(req, res){

console.log(req.body.asinId);
const query = req.body.asinId;
const apiKey = "MY_API_KEY";
const url = "https://api.keepa.com/product?key="+ apiKey +"&domain=1&asin="+ query;

const options ={
      methode:"GET",
      hearders: {
      "Content-Type":"application/json;charset=UTF-8",
      "Accept-Encodeing":"gzip",
      }
}

https.get(url,options, function(response){
response = decompressResponse(response);
console.log(response.statusCode);
console.log(response.headers);
var data;

response.on("data", function(chunk) {
if (!data) {
data = chunk;
} else {
data += chunk;
}

console.log(data);

});
});
res.send("server is running");
});

标签: node.jsjsonexpress

解决方案


我假设您正在谈论您console.log(data);在响应的数据事件回调中的内容。
这是因为您还没有读取所有数据。 response.on("data", callback)为您收到并解压缩的每个块调用。要获取完成的数据,请将 console.log 放在结束事件回调中:

const express = require("express")
const https = require("https")
const decompressResponse = require("decompress-response")
const bodyParser = require("body-parser")

const app = express()

app.use(bodyParser.urlencoded({ extended: true }))

app.get("/", function (req, res) {

    res.sendFile(__dirname + "/index.html")
})

app.post("/", function (req, res) {

    console.log(req.body.asinId)
    const query = req.body.asinId
    const apiKey = "MY_API_KEY"
    const url = "https://api.keepa.com/product?key=" + apiKey + "&domain=1&asin=" + query

    const options = {
        methode: "GET",
        hearders: {
            "Content-Type": "application/json;charset=UTF-8",
            "Accept-Encodeing": "gzip",
        }
    }

    https.get(url, options, function (response) {
        response = decompressResponse(response)
        console.log(response.statusCode)
        console.log(response.headers)
        var data

        response.on("data", function (chunk) {
            if (!data) {
                data = chunk
            } else {
                data += chunk
            }
        })

        response.on("end", function () {
            console.log(data)
        })
    })
    res.send("server is running")
})


推荐阅读