Как прочитать URL-адрес, содержащий JSON в текстовом файле в Visual Studio, и после загрузки JSON записать в другой текстовый файл? - PullRequest
0 голосов
/ 08 ноября 2018

Привет. Это мой самый первый опыт использования файла node.js, поэтому я понятия не имею, что я делаю неправильно. Кроме того, поскольку нам может потребоваться обобщить этот процесс, мне нужно будет вставить существующий код «Обещания», который обрабатывает извлечение JSON в функциональное выражение, называемое «getJSON», которое принимает один параметр (url). Поскольку мы хотим, чтобы весь процесс происходил при запуске, я должен кодировать «getJSON» как IIFE с URL-адресом, полученным из urls.txt в качестве единственного параметра IIFE. Наконец, в моей функции разрешения, расположенной в разделе потребления обещаний, я должен сохраните возвращенную строку JSON в файл с именем JSON.txt и верните в браузер сообщение с надписью «Данные JSON сохранены в файл» и отобразите то же сообщение в консоли. Каждый раз, когда я бегу, я получаю сообщение об ошибке в строке 72 или (startURL). Буду признателен за любую помощь, пожалуйста

let fs = require('fs');

let readME = "JSON data saved to file";

let url = "./urls.txt"
fs.readFile('urls.txt', { encoding: 'utf8' }, function (err, data) {
    if (err) {
        console.log("Error:Could not open the file for reading\n");
    }
    else {
        //fs.writeFile('json.txt', data);
        //console.log(readME);
        getJSON(url);
        document.write(readME);
    }
});

let http = require('http');

let express = require("express");
var XMLHttpRequest = require("xmlhttprequest").XMLHttpRequest;
let app = express();

let port = process.env.PORT || 3000;

app.use('/', express.static('pages'));

let getJSON = (function (url) {    
    // Here we create a promise , that could occur in the future
    return new Promise(function (resolve, reject) {

        let req = new XMLHttpRequest();

        req.open('GET', 'http://gd2.mlb.com/components/game/mlb/year_2017/month_07/day_08/master_scoreboard.json');

        req.onload = function () {

            if (req.status === 200) {
                resolve(req.responseText);
                url(response);

                //resolve(JSON.parse(req.response));
            }
            else {
                reject(req.statusText);
            }
        };

        req.onerror = function () {
            reject("network error");
        };

        req.send();
    });

    getJSON(url).then(
        function (response) {
            req.send(response);

            fs.writeFile('json.txt', JSON.stringify(response));
            //let obj = JSON.parse(response);
            //let fs = require('fs');
            //fs.writeFile('json.txt', obj);

            document.write("JSON data saved to file");
        },
        function (error) {
            console.error("Request failed: ", error);
        }
    );
})(startURL);

let server = http.createServer(app);

server.listen(port, function () {

    console.log("JSON data saved to file");
});

//app.listen(port, function () {
//    console.log('JSON data saved to file');
//});

1 Ответ

0 голосов
/ 08 ноября 2018

Я действительно не знаю, что ты там делаешь, если честно. Используя экспресс и http. Я бы рекомендовал использовать axios для GET-запроса в узле.

Если в urls.txt всего один URL, простой пример использования axios, который может решить вашу проблему:

const fs = require("fs");
const axios = require("axios");

const urls = "./urls.txt";

fs.readFile(urls, "utf8", (err, data) => {
  axios.get(data).then(res => {
    fs.writeFile("json.txt", JSON.stringify(res.data), err => {
      if (!err) console.log("Written to file.");
    });
  });
});

Edit: кажется, вы хотите, чтобы это было вызвано HTTP-запросом Get

const express = require("express");
const fs = require("fs");
const axios = require("axios");

const app = express();
const urls = "./urls.txt";

app.get("/", (req, resp) => {
  fs.readFile(urls, "utf8", (err, data) => {
    axios.get(data).then(res => {
      fs.writeFile("json.txt", JSON.stringify(res.data), err => {
        if (!err) resp.send("Written to file.");
      });
    });
  });
});

app.listen(3000, () => {
  console.log("Listening for requests");
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...