I need to get all data from API. The data is served in batches (pages). Every batch has its page number.
My solution:
- GET page 1, save it to the file
- Loop by adding +1 to page number and append to the file the result from GET request
- Continue while no error
Currently the file is created and then I get: FATAL ERROR: Ineffective mark-compacts near heap limit Allocation failed - JavaScript heap out of memory
So I used --max-old-space-size=8192
no errors since then. It's just keeps working with no result. File stays empty.
Please help!
const fs = require('fs');
const axios = require('axios');
const { response } = require('express');
var myWriteStream = fs.createWriteStream(
'../dev-data/file.json',
{ flags: 'a' },
{ encoding: 'utf8' },
err => {}
);
let pageNumber = 1;
// Getting initial batch on Page 1
axios
.get(`https://api.example.com/?page=${pageNumber}`)
.then(function (response) {
var json = JSON.stringify(response.data);
// Saving result to the file
fs.writeFile('../dev-data/declarations_list.json', json, 'utf-8', err => {
});
// Looping GET + save to the file by adding + 1 to currentPage
do {
pageNumber = response.data.page.currentPage + 1;
axios
.get(
`https://api.example.com/?page=${pageNumber}`
)
.then(function (response) {
console.log(`Current page: ${response.data.page.currentPage}`);
pageNumber = response.data.page.currentPage;
var json = JSON.stringify(response.data);
myWriteStream.write(json);
})
.catch(function (error) {
console.log(error);
});
// Do while currentPage (no 'error')
} while (response.data.page.currentPage);
});
UPDATE
const fs = require('fs');
const axios = require('axios');
const { response } = require('express');
let pageNumber = 0;
do {
pageNumber = pageNumber + 1;
console.log(pageNumber);
axios
.get(`https://public-api.nazk.gov.ua/v1/declaration/?page=${pageNumber}`)
.then(function (response) {
console.log(response);
console.log(`Current page: ${response.data.page.currentPage}`);
pageNumber = response.data.page.currentPage;
var json = JSON.stringify(response.data);
fs.appendFileSync('../dev-data/declarations_list.json', json);
})
.catch(function (error) {
console.log(error);
});
} while (pageNumber < 15000);