Совершенно новый для выражения и относительно неопытный с 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)
Что я делаю не так?
@JonSkeet Я вижу vary: 'Origin, Accept-Encoding', 'access-control-allow-credentials': 'true', 'cache-control': 'max-age=43200',
в заголовке ответа. Как мне с этим справиться?
Это определенно проблема с кодировкой. Попробуйте это: stackoverflow.com/a/21284905/4088472
Вам нужно добавить 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
Вы смотрели заголовки в ответе на что-то вроде accept-encoding?