为什么我的node.js应用程序在尝试对来自youtubeapi的传入数据使用JSON.parse(数据)时崩溃



我正在尝试使用youtube api,使用一个带有搜索框和搜索按钮的简单前端来搜索视频。

我使用标准的https.get((方法来实现这一点。我遇到的问题是,一旦数据到达response.on((代码块中,我通常会对该数据使用JSON.parse,并将其存储在另一个变量中,在该变量中我将有可用的javascript对象。

结果是应用程序在控制台中崩溃并出现以下错误:undefined:25 "url": "https://i.ytimg.com/vi/fWRISvAygU/ SyntaxError: Unexpected end of JSON input at JSON.parse (<anonymous>) at IncomingMessage.<anonymous>和标准[nodemon] app crashed - waiting for file changes before starting...

我可以确认的是:

-我已经尝试过在poster中获取这些数据(粘贴到poster中的完全相同的url(,并且我确实像往常一样收到了一个长json格式的

-我已经确认,我从前端获得的数据正在转换为字符串,这些字符串非常适合url-我已经在控制台中记录了https.get((方法中的状态代码,我得到了一个200ok的

-我已经在控制台上记录了响应中的(数据(。on("data",function(data({}(还没有解析它,我得到了缓冲区数据<Buffer 7d 0a 20 20 22 6b .... bla bla

注意:我必须注意一些重要的事情:我以前只对一个项目做过这件事(从天气API获取天气数据(,而在我的另一个项目的代码中,它运行得很好,我看到的唯一不同是,我在JSON.parse((之前获取的缓冲区数据应用于传入数据,该缓冲区数据只有一个序列。这意味着它是一个一次性的<Buffer 7d 0a 20 20 22 6b bla bla more bytes>我试图在当前项目中检索的当前数据来自5个不同的缓冲区数据块。在尝试JSON.parse((.之前,当我在控制台记录数据时,我可以看到缓冲区数据的5个不同的打开和关闭标记

如果我在这里没有使用好的术语,请原谅我,因为这是我编码的第6个月,我还处于这段旅程的早期。我刚刚开始涉足Node.js 的API

const express = require("express");
const bodyParser = require("body-parser");
const https = require("https");
const Joi = require("joi");
const apiKey = "MyKeyWouldBeHere"; (hiding it)
const app = express();
app.use(bodyParser.urlencoded({extended:true}));
app.use(express.static("public"));


app.get("/", (req, res) => {
res.sendFile(`${__dirname}/index.html`);
});
app.post("/videos", (req, res) => {
const {error} = validation(req.body);
if (error) return res.status(400).send("wrong way to write");

const userInput = req.body.userInput;
https.get(`https://www.googleapis.com/youtube/v3/search?part=snippet&key=${apiKey}&q=${userInput}`, (response) => {

console.log(response.statusCode);
response.on("data", function(data) {
const weatherData = JSON.parse(data);
console.log(data);
});
});

});

app.listen("3000", () => {
console.log("Running server on port 3000");
});

function validation(value) {
const schema = Joi.object({
userInput: Joi.string().min(2).required()
});
return schema.validate(value);
}

这也发生在我身上,很明显,Javascript不喜欢"data",对我来说,我只需要将var更改为reponseText,现在一切都很好。

永远不会知道

最新更新