在完成数据库中的插入之前关闭连接

Com*_*own 5 postgresql node.js async-await

我正在Node.js中创建我的第一个应用程序,它应该按顺序执行这些操作:

  1. 连接到PostgreSQL数据库
  2. 创建一个表(如果它已经存在,做任何事情)
  3. 使网络抓取两个网站并保存有关数据库的信息
  4. 使用D3.js和数据库上的数据创建可视化
  5. 它与数据库断开连接.

我发布了一个关于插入操作的上一个问题.现在问题是async/await.

我知道Node.js是异步的,而我应该同步进行操作.我正在使用Node.js v8.9.4,所以我使用async/await构造.

我读了一下'如何异步/等待,但我发现很难正确使用它.

这是我的应用程序(app.js文件)的方案:

const postgreSQLlib = require('./middlewares/postgreSQLlib.js')
const scraperCovIt = require('./routers/scraperCovIt.js');
const scraperCov = require('./routers/scraperCov.js');

const start = async function() {
    // STEP 0 - Start
    await console.log('\nSTART');

    // STEP 1 - Connect to db
    await postgreSQLlib.connect();

    // STEP 2 - Create tables
    var queryCreateCoverages = {
        text: 'CREATE TABLE IF NOT EXISTS coverages ('+
                    'id SERIAL PRIMARY KEY,' +
                    'vaccine VARCHAR(64) NOT NULL,' + 
                    'country VARCHAR(255) NOT NULL,' +
                    'region VARCHAR(255),' +
                    'year VARCHAR(4) NOT NULL,' +
                    'value VARCHAR(12) NOT NULL);'
    };
    var queryRes = await postgreSQLlib.query(queryCreateCoverages, '[CREATE TABLE coverages]');

    // STEP 3 - Get data
    await scraperCovIt.download();
    await scraperCov.download();

    // STEP 4 - Disconnect from db
    await postgreSQLlib.disconnect();

    // STEP 5 - End
    return '\nFINISH';
}

// start application
start()
.then(function(res) {
    console.log(res);
})
.catch(function(err) {
    console.log(err);
});
Run Code Online (Sandbox Code Playgroud)

postgreSQLlib.js:

const {Client} = require('pg'); 
const connectionString = 'postgres://admin:admin@localhost:5432/db';
let client;
var methods = {};

methods.connect = async function() {
    client = new Client({connectionString});
    return await client.connect()
    .then(async function() {
        await console.log('\nConnected to ' + client.database + ' at ' + client.host + ':' + client.port + ' as ' + client.user + ' (pass: ' + client.password + ')');
    })
    .catch(function(err) {
        console.log('\nError during connection to PostgreSQL');
        throw err;
    });
}

methods.query = async function(query, print) {
    return await client.query(query)
    .then(function(res) {
        console.log(print, 'OK query');
        return res;
    })
    .catch(function(err) { 
        console.log(print, 'ERR query');
    });
}

methods.disconnect = async function() {
    return await client.end()
    .then(function() {
        console.log('\nConnection has ended');
    })
    .catch(function(err) {
        console.log('\nError during clossing connection');
        throw err;
    }); 
}

module.exports = methods;
Run Code Online (Sandbox Code Playgroud)

scraperCov.js:

var cheerio = require('cheerio');
var request = require('request-promise');
var postgreSQLlib = require('../middlewares/postgreSQLlib.js');

var methods = {};

var countries = {
    'Albania': 'ALB',
    'Austria': 'AUT',
    'Belgium': 'BEL'
};

methods.download = async function(req, res) {
    for(country in countries) {
        console.log('\nCOUNTRY:', country);
        var url = 'http://apps.who.int/immunization_monitoring/globalsummary/coverages?c=' + countries[country];
        let res = await request(url);
        insert(res);
    }
}

module.exports = methods;

let insert = async function(html) {
    $ = cheerio.load(html);

    var years = [];
    var vaccines = [];
    var coverages = [];

    $('.ts .year').each(function() {
        years.push($(this).text().trim());
    });
    $('.ts .odd td a, .ts .even td a').each(function() {
        vaccines.push($(this).text().trim());
    });
    $('.ts .odd .statistics_small, .ts .even .statistics_small').each(function() {
        coverages.push($(this).text().trim());
    });

    const numYears = years.length;
    const numVaccines = vaccines.length;
    for(var vaccineIdx = 0; vaccineIdx < numVaccines; vaccineIdx++) {
        for(var yearIdx = 0; yearIdx < numYears; yearIdx++) {
            let obj = {
                year: years[yearIdx],
                country: country,
                region: '',
                vaccine: vaccines[vaccineIdx],
                coverage: coverages[vaccineIdx*numYears + yearIdx]
           }

            // save on db
            const queryInsert = {
                text: 'INSERT INTO coverages (vaccine, country, region, year, value) VALUES ($1, $2, $3, $4, $5);',
                values: [vaccines[vaccineIdx], country, '', years[yearIdx], coverages[vaccineIdx*numYears + yearIdx]]
            }
            var printText = '[INSERT ' + country + ' IN coverages]';
            var queryRes = await postgreSQLlib.query(queryInsert, printText);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

scraperCovIt.js:

var textract = require('textract');
var postgreSQLlib = require('../middlewares/postgreSQLlib.js');

var methods = {};
var jsons = [];
var mainUrl = 'http://www.salute.gov.it/portale/documentazione/p6_2_8_3_1.jsp?id=20';
var urls = [ 
    {year: '2013', link: 'http://www.salute.gov.it/imgs/C_17_tavole_20_allegati_iitemAllegati_0_fileAllegati_itemFile_1_file.pdf'}, 
    {year: '2012', link: 'http://www.salute.gov.it/imgs/C_17_tavole_20_allegati_iitemAllegati_5_fileAllegati_itemFile_0_file.pdf'}, 
    {year: '2011', link: 'http://www.salute.gov.it/imgs/C_17_tavole_20_allegati_iitemAllegati_6_fileAllegati_itemFile_0_file.pdf'}
];

methods.download = async function(req, res) {
    await extractText();
}

async function extractText() {
    var config = {
        preserveLineBreaks: true
    };
    urls.forEach(function(url) {
        textract.fromUrl(url.link, config, async function(error, text) {
            if(error) {
                throw error;
            }
            switch(url.year) {
                case '2011': 
                case '2012':
                    await extractTextType1(url, text);
                    break;
                case '2013': 
                    await extractTextType2(url, text);
                    break;
                default:
                    await console.log('Error: no case');
            }
        });
    });
}

async function extractTextType1(url, text) {
    var matrix = [];
    var map = [];
    var vaccines = [];
    var regionsTemp = [];
    var regions = [];
    var regionLength = [1, 2, 1, 2, 3, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1];

    var textArray = text.split('\n');
    for(var i = 0; i < 23; i++) {
        matrix[i] = textArray[i].split(' ');
    }

    matrix[0].shift();
    vaccines = matrix[0];
    map[0] = vaccines;

    for(var i = 0; i < regionLength.length; i++) {
        var j = i + 1; 
        var indexToRemove = 0;
        var numberToRemove = regionLength[i];
        var region = matrix[j].splice(indexToRemove, numberToRemove);
        regionsTemp.push(region);
        map[j+1] = matrix[j];
    }

    for(var i = 0; i < regionsTemp.length; i++) {
        var region = '';
        if(regionLength[i] > 1) {
            region = regionsTemp[i].join(' ');
        }
        else {
            region = regionsTemp[i].join('');
        }
        regions.push(region);
    }
    map[1] = regions;

    for(var i = 0; i < map.length; i++) {
        for(var j = 0; j < map[i].length; j++) {
            map[i][j] = map[i][j].replace(/\r/g, '');
        }
    }

    vaccines = map.shift();
    regions = map.shift();

    var thisJson = map.reduce(function(result, v, i) {
        v.forEach(async function(o, k) {
            var obj = createJsonObjectCoverage(url.year, 'Italy', vaccines[k], regions[i], o);
            // save on db
            const queryInsertDoNothing = {
                text: 'INSERT INTO coverages (vaccine, country, region, year, value) VALUES ($1, $2, $3, $4, $5) ON CONFLICT (vaccine, country, region, year, value) DO NOTHING;',
                values: [vaccines[k], 'Italy', regions[i], url.year, o]
            };
            var printText = '[INSERT Italy IN coverages]';
            var queryRes = await postgreSQLlib.query(queryInsertDoNothing, printText);
        });
        return result;
    }, jsons);
}

async function extractTextType2(url, text) {
    // similar code to extractTextType1(url, text)
}

function createJsonObjectCoverage(year, country, vaccine, region, coverage) {
    return {
        year: year, 
        country: country, 
        region: region, 
        vaccine: vaccine, 
        coverage: coverage
    };
}

module.exports = methods;
Run Code Online (Sandbox Code Playgroud)

The problem is that the inserts in the database do not work as they should.

The result of running app.js with scraperCov.js is:

START

Connected to db at localhost:5432 as admin (pass: admin)
[CREATE TABLE coverages] OK query

COUNTRY: Albania

COUNTRY: Austria
[INSERT Albania IN coverages] OK query
[INSERT Austria IN coverages] OK query
[INSERT Austria IN coverages] OK query
[INSERT Austria IN coverages] OK query
[INSERT Austria IN coverages] OK query
[INSERT Austria IN coverages] OK query
[INSERT Austria IN coverages] OK query
[INSERT Austria IN coverages] OK query
[INSERT Austria IN coverages] OK query
[INSERT Austria IN coverages] OK query
[INSERT Austria IN coverages] OK query
[INSERT Austria IN coverages] OK query
[INSERT Austria IN coverages] OK query
[INSERT Austria IN coverages] OK query
[INSERT Austria IN coverages] OK query
[INSERT Austria IN coverages] OK query
[INSERT Austria IN coverages] OK query
[INSERT Austria IN coverages] OK query
[INSERT Austria IN coverages] OK query
[INSERT Austria IN coverages] OK query
[INSERT Austria IN coverages] OK query
[INSERT Austria IN coverages] OK query
[INSERT Austria IN coverages] OK query
[INSERT Austria IN coverages] OK query
[INSERT Austria IN coverages] OK query
[INSERT Austria IN coverages] OK query
[INSERT Austria IN coverages] OK query
[INSERT Austria IN coverages] OK query
[INSERT Austria IN coverages] OK query
[INSERT Austria IN coverages] OK query
[INSERT Austria IN coverages] OK query
[INSERT Austria IN coverages] OK query
[INSERT Austria IN coverages] OK query
[INSERT Austria IN coverages] OK query
[INSERT Austria IN coverages] OK query
[INSERT Austria IN coverages] OK query
[INSERT Austria IN coverages] OK query
[INSERT Austria IN coverages] OK query
[INSERT Austria IN coverages] OK query
[INSERT Austria IN coverages] OK query
[INSERT Austria IN coverages] OK query
[INSERT Austria IN coverages] OK query
[INSERT Austria IN coverages] OK query
[INSERT Austria IN coverages] OK query
[INSERT Austria IN coverages] OK query
[INSERT Austria IN coverages] OK query
[INSERT Austria IN coverages] OK query
[INSERT Austria IN coverages] OK query
[INSERT Austria IN coverages] OK query
[INSERT Austria IN coverages] OK query
[INSERT Austria IN coverages] OK query
[INSERT Austria IN coverages] OK query
[INSERT Austria IN coverages] OK query
[INSERT Austria IN coverages] OK query
[INSERT Austria IN coverages] OK query
[INSERT Austria IN coverages] OK query
[INSERT Austria IN coverages] OK query
[INSERT Austria IN coverages] OK query
[INSERT Austria IN coverages] OK query
[INSERT Austria IN coverages] OK query
[INSERT Austria IN coverages] OK query
[INSERT Austria IN coverages] OK query
[INSERT Austria IN coverages] OK query
[INSERT Austria IN coverages] OK query
[INSERT Austria IN coverages] OK query
[INSERT Austria IN coverages] OK query
[INSERT Austria IN coverages] OK query
[INSERT Austria IN coverages] OK query
[INSERT Austria IN coverages] OK query
[INSERT Austria IN coverages] OK query
[INSERT Austria IN coverages] OK query
[INSERT Austria IN coverages] OK query
[INSERT Austria IN coverages] OK query
[INSERT Austria IN coverages] OK query
[INSERT Austria IN coverages] OK query
[INSERT Austria IN coverages] OK query
[INSERT Austria IN coverages] OK query
[INSERT Austria IN coverages] OK query
[INSERT Austria IN coverages] OK query
[INSERT Austria IN coverages] OK query
[INSERT Austria IN coverages] OK query
[INSERT Austria IN coverages] OK query
[INSERT Austria IN coverages] OK query
[INSERT Austria IN coverages] OK query
[INSERT Austria IN coverages] OK query
[INSERT Austria IN coverages] OK query
[INSERT Austria IN coverages] OK query
[INSERT Austria IN coverages] OK query
[INSERT Austria IN coverages] OK query
[INSERT Austria IN coverages] OK query
[INSERT Austria IN coverages] OK query
[INSERT Austria IN coverages] OK query
[INSERT Austria IN coverages] OK query
[INSERT Austria IN coverages] OK query
[INSERT Austria IN coverages] OK query
[INSERT Austria IN coverages] OK query
[INSERT Austria IN coverages] OK query
[INSERT Austria IN coverages] OK query
[INSERT Austria IN coverages] OK query
[INSERT Austria IN coverages] OK query
[INSERT Austria IN coverages] OK query
[INSERT Austria IN coverages] OK query
[INSERT Austria IN coverages] OK query
[INSERT Austria IN coverages] OK query
[INSERT Austria IN coverages] OK query
[INSERT Austria IN coverages] OK query
[INSERT Austria IN coverages] OK query
[INSERT Austria IN coverages] OK query
[INSERT Austria IN coverages] OK query
[INSERT Austria IN coverages] OK query
[INSERT Austria IN coverages] OK query
[INSERT Austria IN coverages] OK query
[INSERT Austria IN coverages] OK query
[INSERT Austria IN coverages] OK query
[INSERT Austria IN coverages] OK query
[INSERT Austria IN coverages] OK query
[INSERT Austria IN coverages] OK query
[INSERT Austria IN coverages] OK query
[INSERT Austria IN coverages] OK query
[INSERT Austria IN coverages] OK query
[INSERT Austria IN coverages] OK query
[INSERT Austria IN coverages] OK query
[INSERT Austria IN coverages] OK query
[INSERT Austria IN coverages] OK query
[INSERT Austria IN coverages] OK query
[INSERT Austria IN coverages] OK query
[INSERT Austria IN coverages] OK query
[INSERT Austria IN coverages] OK query
[INSERT Austria IN coverages] OK query
[INSERT Austria IN coverages] OK query
[INSERT Austria IN coverages] OK query
[INSERT Austria IN coverages] OK query
[INSERT Austria IN coverages] OK query
[INSERT Austria IN coverages] OK query
[INSERT Austria IN coverages] OK query
[INSERT Austria IN coverages] OK query
[INSERT Austria IN coverages] OK query
[INSERT Austria IN coverages] OK query
[INSERT Austria IN coverages] OK query
[INSERT Austria IN coverages] OK query
[INSERT Austria IN coverages] OK query
[INSERT Austria IN coverages] OK query
[INSERT Austria IN coverages] OK query
[INSERT Austria IN coverages] OK query
[INSERT Austria IN coverages] OK query
[INSERT Austria IN coverages] OK query
[INSERT Austria IN coverages] OK query
[INSERT Austria IN coverages] OK query
[INSERT Austria IN coverages] OK query
[INSERT Austria IN coverages] OK query
[INSERT Austria IN coverages] OK query
[INSERT Austria IN coverages] OK query
[INSERT Austria IN coverages] OK query

COUNTRY: Belgium
[INSERT Austria IN coverages] OK query
[INSERT Austria IN coverages] OK query
[INSERT Belgium IN coverages] OK query
[INSERT Belgium IN coverages] OK query
[INSERT Belgium IN coverages] OK query
[INSERT Belgium IN coverages] OK query
[INSERT Belgium IN coverages] OK query
[INSERT Belgium IN coverages] OK query
[INSERT Belgium IN coverages] OK query
[INSERT Belgium IN coverages] OK query
[INSERT Belgium IN coverages] OK query
[INSERT Belgium IN coverages] OK query
[INSERT Belgium IN coverages] OK query
[INSERT Belgium IN coverages] OK query
[INSERT Belgium IN coverages] OK query
[INSERT Belgium IN coverages] OK query
[INSERT Belgium IN coverages] OK query
[INSERT Belgium IN coverages] OK query
[INSERT Belgium IN coverages] OK query
[INSERT Belgium IN coverages] OK query
[INSERT Belgium IN coverages] OK query
[INSERT Belgium IN coverages] OK query
[INSERT Belgium IN coverages] OK query
[INSERT Belgium IN coverages] OK query
[INSERT Belgium IN coverages] OK query
[INSERT Belgium IN coverages] OK query
[INSERT Belgium IN coverages] OK query
[INSERT Belgium IN coverages] OK query
[INSERT Belgium IN coverages] OK query
[INSERT Belgium IN coverages] OK query
[INSERT Belgium IN coverages] OK query
[INSERT Belgium IN coverages] OK query
[INSERT Belgium IN coverages] OK query
[INSERT Belgium IN coverages] OK query
[INSERT Belgium IN coverages] OK query
[INSERT Belgium IN coverages] OK query
[INSERT Belgium IN coverages] OK query
[INSERT Belgium IN coverages] OK query
[INSERT Belgium IN coverages] OK query
[INSERT Belgium IN coverages] OK query
[INSERT Belgium IN coverages] OK query
[INSERT Belgium IN coverages] OK query
[INSERT Belgium IN coverages] OK query
[INSERT Belgium IN coverages] OK query
[INSERT Belgium IN coverages] OK query
[INSERT Belgium IN coverages] OK query
[INSERT Belgium IN coverages] OK query
[INSERT Belgium IN coverages] OK query
[INSERT Belgium IN coverages] OK query
[INSERT Belgium IN coverages] OK query
[INSERT Belgium IN coverages] OK query
[INSERT Belgium IN coverages] OK query
[INSERT Belgium IN coverages] OK query
[INSERT Belgium IN coverages] OK query
[INSERT Belgium IN coverages] OK query
[INSERT Belgium IN coverages] OK query
[INSERT Belgium IN coverages] OK query
[INSERT Belgium IN coverages] OK query
[INSERT Belgium IN coverages] OK query
[INSERT Belgium IN coverages] OK query
[INSERT Belgium IN coverages] OK query
[INSERT Belgium IN coverages] OK query
[INSERT Belgium IN coverages] OK query
[INSERT Belgium IN coverages] OK query
[INSERT Belgium IN coverages] OK query
[INSERT Belgium IN coverages] OK query
[INSERT Belgium IN coverages] OK query
[INSERT Belgium IN coverages] OK query
[INSERT Belgium IN coverages] OK query
[INSERT Belgium IN coverages] OK query
[INSERT Belgium IN coverages] OK query
[INSERT Belgium IN coverages] OK query
[INSERT Belgium IN coverages] OK query
[INSERT Belgium IN coverages] OK query
[INSERT Belgium IN coverages] OK query
[INSERT Belgium IN coverages] OK query
[INSERT Belgium IN coverages] OK query
[INSERT Belgium IN coverages] OK query
[INSERT Belgium IN coverages] OK query
[INSERT Belgium IN coverages] OK query
[INSERT Belgium IN coverages] OK query
[INSERT Belgium IN coverages] OK query
[INSERT Belgium IN coverages] OK query
[INSERT Belgium IN coverages] OK query
[INSERT Belgium IN coverages] OK query
[INSERT Belgium IN coverages] OK query
[INSERT Belgium IN coverages] OK query
[INSERT Belgium IN coverages] OK query
[INSERT Belgium IN coverages] OK query
[INSERT Belgium IN coverages] OK query
[INSERT Belgium IN coverages] OK query
[INSERT Belgium IN coverages] OK query
[INSERT Belgium IN coverages] OK query
[INSERT Belgium IN coverages] OK query
[INSERT Belgium IN coverages] OK query
[INSERT Belgium IN coverages] OK query
[INSERT Belgium IN coverages] OK query
[INSERT Belgium IN coverages] OK query
[INSERT Belgium IN coverages] OK query
[INSERT Belgium IN coverages] OK query
[INSERT Belgium IN coverages] OK query
[INSERT Belgium IN coverages] OK query
[INSERT Belgium IN coverages] OK query
[INSERT Belgium IN coverages] OK query
[INSERT Belgium IN coverages] OK query
[INSERT Belgium IN coverages] OK query
[INSERT Belgium IN coverages] OK query
[INSERT Belgium IN coverages] OK query
[INSERT Belgium IN coverages] OK query
[INSERT Belgium IN coverages] OK query
[INSERT Belgium IN coverages] OK query
[INSERT Belgium IN coverages] OK query
[INSERT Belgium IN coverages] OK query
[INSERT Belgium IN coverages] OK query
[INSERT Belgium IN coverages] OK query
[INSERT Belgium IN coverages] OK query
[INSERT Belgium IN coverages] OK query
[INSERT Belgium IN coverages] OK query
[INSERT Belgium IN coverages] OK query
[INSERT Belgium IN coverages] OK query
[INSERT Belgium IN coverages] OK query
[INSERT Belgium IN coverages] OK query
[INSERT Belgium IN coverages] OK query
[INSERT Belgium IN coverages] OK query
[INSERT Belgium IN coverages] OK query
[INSERT Belgium IN coverages] OK query
[INSERT Belgium IN coverages] OK query
[INSERT Belgium IN coverages] OK query
[INSERT Belgium IN coverages] OK query
[INSERT Belgium IN coverages] OK query
[INSERT Belgium IN coverages] OK query
[INSERT Belgium IN coverages] OK query
[INSERT Belgium IN coverages] OK query
[INSERT Belgium IN coverages] OK query
[INSERT Belgium IN coverages] OK query
[INSERT Belgium IN coverages] OK query
[INSERT Belgium IN coverages] OK query
[INSERT Belgium IN coverages] OK query
[INSERT Belgium IN coverages] OK query
[INSERT Belgium IN coverages] OK query
[INSERT Belgium IN coverages] OK query
[INSERT Belgium IN coverages] OK query
[INSERT Belgium IN coverages] OK query
[INSERT Belgium IN coverages] OK query
[INSERT Belgium IN coverages] OK query
[INSERT Belgium IN coverages] OK query
[INSERT Belgium IN coverages] OK query
[INSERT Belgium IN coverages] OK query
[INSERT Belgium IN coverages] OK query
[INSERT Belgium IN coverages] OK query
[INSERT Belgium IN coverages] OK query
[INSERT Belgium IN coverages] OK query
[INSERT Belgium IN coverages] OK query
[INSERT Belgium IN coverages] OK query
[INSERT Belgium IN coverages] OK query
[INSERT Belgium IN coverages] OK query
[INSERT Belgium IN coverages] OK query
[INSERT Belgium IN coverages] OK query
[INSERT Belgium IN coverages] OK query
[INSERT Belgium IN coverages] OK query
[INSERT Belgium IN coverages] OK query
[INSERT Belgium IN coverages] OK query
[INSERT Belgium IN coverages] OK query
[INSERT Belgium IN coverages] OK query
[INSERT Belgium IN coverages] OK query
[INSERT Belgium IN coverages] OK query
[INSERT Belgium IN coverages] OK query
[INSERT Belgium IN coverages] OK query
[INSERT Belgium IN coverages] OK query
[INSERT Belgium IN coverages] OK query
[INSERT Belgium IN coverages] OK query
[INSERT Belgium IN coverages] OK query
[INSERT Belgium IN coverages] OK query
[INSERT Belgium IN coverages] OK query
[INSERT Belgium IN coverages] OK query
[INSERT Belgium IN coverages] OK query
[INSERT Belgium IN coverages] OK query
[INSERT Belgium IN coverages] OK query
[INSERT Belgium IN coverages] OK query
[INSERT Belgium IN coverages] OK query
[INSERT Belgium IN coverages] OK query
[INSERT Belgium IN coverages] OK query
[INSERT Belgium IN coverages] OK query
[INSERT Belgium IN coverages] OK query
[INSERT Belgium IN coverages] OK query
[INSERT Belgium IN coverages] OK query
[INSERT Belgium IN coverages] OK query
[INSERT Belgium IN coverages] OK query
[INSERT Belgium IN coverages] OK query
[INSERT Belgium IN coverages] OK query
[INSERT Belgium IN coverages] OK query
[INSERT Belgium IN coverages] OK query
[INSERT Belgium IN coverages] OK query

Connection has ended

FINISH
[INSERT Belgium IN coverages] ERR query
Run Code Online (Sandbox Code Playgroud)

As you can see from the prints, at the end there is an error because the connection is closed before the insertions end. In addition, the insertions are not in order (under the word COUNTRY: Albania, there is nothing, while under the word COUNTRY: Austria there is the result of some queries related to Albania, etc.).

The result of running app.js with scraperCovIt.js is instead:

START

Connected to db at localhost:5432 as admin (pass: admin)
[CREATE TABLE coverages] OK query

Connection has ended

FINISH
Run Code Online (Sandbox Code Playgroud)

In this case, the inserts are not exactly executed.

How can I solve?

这些是我试图解决这个问题的日子,但我不知道该怎么做.这是我第一次使用,async/await而且我遇到了很多麻烦.

感谢任何想要帮助我的人