Расшифровка искаженного JSON из axios.get

Совершенно новый для выражения и относительно неопытный с JS/TS. Играем с настройкой экспресс-сервера с двумя конечными точками. Ответ от httpbin (https://httpbin.org/get -> http://localhost:3031/simpleget) выглядит нормально.

Однако я не могу разобрать JSON, полученный от http://jsonplaceholder.typicode.com/users/1 (http://localhost:3031/users/1). Ответ выглядит примерно так:

"��\u0000 ���w����?JO�_��9��\u0013U>H�z�]{�\u0014�)�o6Ī\u0004��pc]+actical ��Dž\u0006�g�Gg\u000f [�\u001aэ\u0007����\u001a�)<\f�\u0017�{���DK��ʌ�ҳ�h\rz�hS�' ������Nu\u0007��5�v\u0001r��̴\u0006},\u001d;|ںY�\u0003�\u0016;�dw��#�r�dk�#�A/{\ u00196��K�$;�i;V��U�Z�&)�4m-#=\u0001�q$&)�$�V\f\u0002����5���(]� \u0004��\u0003��wS3\u000e$��\u0014Eh�$7e�D8dy��:�΅�i\rjlWI�Z���\u0015���O<\u001c�\u00007g�c� �"��AǁU!\r���F�q~-�lM�GQ��\u0001k�Dw�\u0018dQ�� N�Sr�:�sP��̶\u0017���\u001e9�w \u0005"

Пробовал textdecoder, json stringify, преобразование юникода и многие другие подходы, но ничего не кажется

const express = require("express")
const axios = require("axios")
const cors = require("cors")

const app = express()
app.use(express.urlencoded({ extended:true}))
app.use(cors())

app.get("/users/:id", async(req, res) => {
    const { data } = await axios.get(
        `https://jsonplaceholder.typicode.com/users/${req.params.id}`
        )
    res.json(data)
})

app.get("/simpleget", async(req, res) => {
    const {data} = await axios.get("https://httpbin.org/get")
    res.json(data)
})

app.listen(3031)

Что я делаю не так?

Вы смотрели заголовки в ответе на что-то вроде accept-encoding?

Jon Skeet 23.11.2022 22:15

@JonSkeet Я вижу vary: 'Origin, Accept-Encoding', 'access-control-allow-credentials': 'true', 'cache-control': 'max-age=43200', в заголовке ответа. Как мне с этим справиться?

Spade 23.11.2022 22:33

Это определенно проблема с кодировкой. Попробуйте это: stackoverflow.com/a/21284905/4088472

Slava Knyazev 23.11.2022 22:44
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
3
71
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вам нужно добавить Accept-Encoding с «application/json» в заголовок axios.get.

По умолчанию это gzip

Это демонстрационный код.

const express = require("express")
const axios = require("axios")
const cors = require("cors")

const app = express()
app.use(express.urlencoded({ extended: true }))
app.use(cors())

app.get("/users/:id", async (req, res) => {
    const { data } = await axios.get(
        `https://jsonplaceholder.typicode.com/users/${req.params.id}`,
        {
            headers: {
                'Accept-Encoding': 'application/json',
            }
        }
    )
    res.json(data)
})

app.get("/simpleget", async (req, res) => {
    const { data } = await axios.get("https://httpbin.org/get")
    res.json(data)
})

app.listen(3031)

Установить

npm install express axios cors

Запустить его

node users.js

Результат, если браузер открывает сервер

http://localhost:3031/users/1

Другие вопросы по теме