node.js - 在 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");
});
解决方案
我假设您正在谈论您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")
})
推荐阅读
- scikit-learn - sklearn : FitFailedWarning : 估计器拟合失败
- ansible - Ansible - 当条件未按预期工作时
- javascript - 输入字段不显示值+文本对齐问题
- spring-boot - 无法退出
- java - ListIterator 在线程“主”java.util.ConcurrentModificationException 中抛出“异常”Java
- pandas - 转换 pandas 中的数据类型并删除不必要的行
- c# - Firefox 中的 CSP connect-src 问题
- javascript - 如何为不同的输入使用相同的处理程序?
- javascript - 优化此正则表达式以捕获星号之间的封闭字符串,如 **(str)**
- python - 在scrapy中处理启动请求动作