Импорт файла json из stackexchange и печать с использованием узла js (экспресс) - PullRequest
2 голосов
/ 03 июля 2019

Я пытаюсь запросить файл json из API stackexchange, и при загрузке сервера сохраните его на стороне клиента, чтобы я мог манипулировать / изменять его локально.

Я пытался использовать этот код, но страница просто продолжает загружаться, и ничего не происходит.

const express = require('express');
const bodyParser = require('body-parser');
const request = require('request');

const app = express();

app.use(bodyParser.urlencoded({ extended: true }));
app.use(bodyParser.json)

const surl = 'https://api.stackexchange.com/2.2/users/11097431?order=desc&sort=reputation&site=stackoverflow';

app.use('/', (req, res, next) => {
    request(surl, (error, response, body) => {
        // res.setHeader("Content-Type", "application/json; charset=utf-8");
        res.json(body)
        console.log('body:', body);
        console.log('body:', req.body);
    });
});

app.listen(3000, () => { console.log('On port 3000...') });

И если я закомментирую эти две строки в моем коде ниже

app.use(bodyParser.urlencoded({ extended: true }));
app.use(bodyParser.json)

Это дает такой вид вывода.

"\u001f�\b��\u0000��8z00\u0000^{4���=�c��\u0000��#c�\u0002\u0000\u0000"

Если бы кто-нибудь мог дать мне старт, это было бы здорово! Спасибо.

1 Ответ

2 голосов
/ 03 июля 2019

Вывод бессмысленный, потому что body сжатый gzip.Это не JSON, даже текст:

enter image description here

Чтобы вернуть его в браузер, проще всего использовать pipe:

const request = require('request');
const surl = 'https://api.stackexchange.com/2.2/users/11097431?order=desc&sort=reputation&site=stackoverflow';

app.use('/', (req, res) => {
  request(surl).pipe(res);
});

Или, если вы хотите манипулировать / изменять тело, можно использовать опцию gzip: true:

const request = require('request');
const surl = 'https://api.stackexchange.com/2.2/users/11097431?order=desc&sort=reputation&site=stackoverflow';

app.use('/', (req, res) => {
  request({
    url: surl,
    gzip: true
  }, function(error, response, body) {
    let bodyObj = JSON.parse(body);
    // change bodyObj...
    res.json(bodyObj);
  });
});
...