Tengo una tarea en la que me dan una URL como https://xyz.json . Esta URL solicita la descarga del archivo JSON en el archivo local. Ahora debo leer el uso de estos datos JSON para su posterior procesamiento. Como soy nuevo en NodeJS y Express, me siento confundido acerca de cómo lograr esto en ExpressJS.
Esto es lo que he probado:
const https = require("https"); const fs = require("fs"); const file = fs.createWriteStream("outputFile.json"); const request = https.get( "https://xyz.json", function (response) { response.pipe(file); // after download completed close filestream file.on("finish", () => { file.close(); console.log("Download Completed"); }); } );Aquí, en outputFile.json, no hay datos presentes
Qn2) ¿Puedo descargar periódicamente usando setTimeOut()? ¿Sería eficiente o hay alguna forma mejor de almacenar datos en caché para que la aplicación sea más rápida?
¡Gracias por adelantado!
Aquí hay una aplicación de muestra que descarga un json activado cuando accede a una ruta API alojada como servidor ExpressJS.
const express = require('express'); const cors = require('cors'); const morgan = require('morgan'); const bodyParser = require('body-parser'); const axios = require('axios'); const fs = require('fs'); const app = express(); app.use(cors()); app.use(morgan(':method :url :status :user-agent - :response-time ms')); app.use(bodyParser.json()); app.get('/', async (req, res) => { try { const { status, data } = await axios.get('http://52.87.135.24/json-files/events.json'); // Can be replaced by your json url if (status === 200) { fs.writeFileSync('data.json', JSON.stringify(data)); res.status(200).json({ success: 'Downloaded file.', data: data // Comment it if you don't want to send the data back }) } else { res.status(404).json({ 'Failed': 'File not found.' }) } } catch (err) { console.log(err); res.status(500).json({ 'Error': 'Internal Server Error' }); } }); app.listen(process.env.PORT || 3000, function () { console.log('Express app running on port ' + (process.env.PORT || 3000)) }); Y como mencioné que esta descarga se activa cada vez que realiza una solicitud en http://localhost:3000 , en este caso, puede crear un script de cliente que actúa como un trabajo cron en el que puede usar setTimeout o setInterval para descargar su archivo periódicamente.
const axios = require('axios'); setInterval(async () => { await axios.get('http://localhost:3000/'); }, 5000);¡Aquí hay un guión así! :)