axios Аргумент "url" должен иметь тип string. Полученный тип неопределенная ошибка - PullRequest
0 голосов
/ 28 июня 2019

Я работаю над электронным приложением, которое пытается загрузить фотографию из unsplash API и установить ее в качестве обоев. Когда я вызываю API, я получаю статус 200 OK и получаю URL-адрес для загрузки, но при попытке загрузить фотографию с помощью метода axios stream я получаю следующую ошибку:

UnhandledPromiseRejectionWarning: TypeError [ERR_INVALID_ARG_TYPE]: Аргумент "url" должен иметь тип string. Полученный тип не определен

это код функции:

ipcMain.on("getRandomWallpaper", async event => {
  const randomApi = `${apiGateway}/?client_id=${unsplashKey}`;
  const request = await axios({
    method: "get",
    url: randomApi
  });
  if (request.status === 200) {
    const downloadUrl = request.data.links.download;
    const imagePath = "./images";
    const download_image = async (downloadUrl, imagePath) => {
      await axios({
        downloadUrl,
        responseType: "stream"
      }).then(
        response =>
          new Promise((resolve, reject) => {
            response.data
              .pipe(fs.createWriteStream(imagePath))
              .on("finish", () => resolve())
              .on("error", e => reject(e));
          })
      );
    };
    download_image(downloadUrl, imagePath);
  } else {
    const status = request.status;
    console.error(`${status}: \n Something went wrong...`);
  }
});

Когда я попытался console.log параметр downloadUrl внутри функции, он напечатал значение. Также я сделал

 console.log(typeoff(downloadUrl))

и это печатная строка. Я надеюсь, что вы можете помочь мне, заранее спасибо.

1 Ответ

2 голосов
/ 28 июня 2019

Вы используете деструктуризацию:

await axios({
    downloadUrl,
    responseType: "stream"
})

Это означает, что вы используете downloadUrl в качестве ключа вместо url:

await axios({
    downloadUrl: downloadUrl,
    responseType: "stream"
})

Вам нужно изменить его на url:

await axios({
    url: downloadUrl,
    responseType: "stream"
})

Правильный пример axios из doc :

axios({
  method: 'post',
  url: '/user/12345',
  data: {
    firstName: 'Fred',
    lastName: 'Flintstone'
  }
});
...