Как передать HTTPS получить ответ в объект - PullRequest
1 голос
/ 10 марта 2020

Я преобразовал свой код так, чтобы вместо дополнительных модулей_узлов я мог просто использовать некоторые запросы HTTPS GET, проблема в том, что когда я пытаюсь передать /releases/, который в основном является необработанным файлом JSON, мой код требует он возвращается и проблемы возникают как SyntaxError: Unexpected end of JSON input, потому что по какой-то причине, когда я console.log () так называемый массив JSON, конец не завершается с помощью] или}. Поэтому я пытаюсь передать ответ в массив, но теперь я получаю сообщение об ошибке: dest.on isn't a function,

Код:

    https.get({hostname: `api.github.com`, path: `/repos/${username}/${reponame}/releases`, headers: {'User-Agent': 'a user agent'}}, async (response) => {
        var file = new Array()
        response.pipe(file)
        response.on('end', async function() { //issue occurs at response.pipe ???
        var releases = JSON.parse(fs.readFileSync('./releases.json', 'utf8'))
        console.log(releases)

Файл JSON, к которому я получаю доступ из Github, выглядит как: https://api.github.com/repos/davidmerfield/randomColor/releases (случайное хранилище)

Но мой файл (релизы. json) выглядит как this

Редактировать: I сделал обширное тестирование. Я использовал тот же JSON файл, который вывел мой pkg, прочитал его с помощью fs и так далее, и все, кажется, в порядке. Так что проблема, скорее всего, связана с https / response

Ответы [ 3 ]

0 голосов
/ 10 марта 2020

TypeError: dest.on не является функцией

Эта ошибка будет выдана, если вы попытаетесь направить поток к объекту Stream без возможности записи. Проверьте здесь

Который в этом случае Array не является записываемым потоком. Вы можете создать доступный для записи поток, используя fs.createWriteStream(), и направить ответ на него.

https.get(
  { hostname: `api.github.com`, path: `/repos/${username}/${reponame}/releases`, headers: { "User-Agent": "a user agent" } },
  async response => {
    const writableStreamFile = fs.createWriteStream("./releases.json");
    response.pipe(writableStreamFile);
    response.on("end", async function() {
      var releases = JSON.parse(fs.readFileSync("./releases.json", "utf8"));
      console.log(releases);
    });
  }
);


0 голосов
/ 11 марта 2020

Я узнал, как направить HTTP-запрос в объект, а не передавать его в файл. Благодаря этому посту . Я сделал это и превратил строку в массив JSON.

https.get({hostname: `api.github.com`, path: `/repos/${username}/${reponame}/releases`, headers: {'User-Agent': 'agent'}}, async response => {
        var str = ''
        response.on('data', (data) => {
            str += data
        })
        response.on('end', async function() {
        var releases = JSON.parse(str)
//and so on...
0 голосов
/ 10 марта 2020

Вы можете require JSON файлов. Итак, если вам нужен этот файл, вы можете сделать что-то вроде:

const releases = require('./releases.json');

Вам не нужно читать его с помощью fs, если вы действительно не хотите.

...