使用Node.js和PostgreSQL的INSERT操作不起作用 [英] INSERT operation using Node.js and PostgreSQL doesn't work

查看:102
本文介绍了使用Node.js和PostgreSQL的INSERT操作不起作用的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在使用Node.js和PostgreSQL创建我的第一个应用程序。
此应用程序连接到db,创建表,对网站进行网页抓取,将信息插入db,然后与db断开连接。
我正在尝试使用 async / await



问题是插入操作不起作用。没有错误,表 coverage 仍然为空。



这是我的代码。



app.js

  const postgreSQLlib = require('./ middlewares / postgreSQLlib。 js')
const scraper = require('./ routers / scraper.js');

const start = async function(){
await console.log(’START’);

//连接
等待postgreSQLlib.connect();

//创建表
var queryCreateCoverages = {
文本:'如果不存在coverage,则创建表('+
'id SERIAL PRIMARY KEY,'+
'疫苗VARCHAR(64)非空,'+
'国家VARCHAR(255)非空,'+
'区域VARCHAR(255),'+
'年VARCHAR(4 )NOT NULL,'+
'value VARCHAR(12)NOT NULL);'
};
var queryRes =等待postgreSQLlib.query(queryCreateCoverages);
//console.log(’Result:’,queryRes);

//获取数据
等待scraper.download();

常量查询= {
文本:'SELECT * FROM coverages;',
值:['Italy']
}
var queryRes =等待postgreSQLlib.query(query);
//console.log(’Result:’,queryRes);

//断开
等待postgreSQLlib.disconnect();

返回完成;
}

//启动应用程序
start()
.then(function(res){
console.log(res);
})
.catch(function(err){
console.log(err);
});

postgreSQLlib.js

  var fs = require('fs'); 
const {Client} = require(’pg’); // node-postgres npm package

const userDb ='admin';
const passDb ='admin';
const hostDb =‘localhost’; //默认
const portDb ='5432'; //默认
const nameDb ='db';
const connectionString =‘postgres://’+ userDb +’:’+ passDb +‘@’+ hostDb +’:’+ portDb +’/’+ nameDb; //结果为 postgres:// admin:admin @ localhost:5432 / db;
让客户;

var方法= {};

Methods.connect =异步函数(){
client = new Client({connectionString});
return await client.connect()
.then(async function(){
await console.log('\n已连接至'+ client.database +'位于'+ client.host +':'+ client.port +'作为'+ client.user +'(pass:'+ client.password +')');
})
.catch(function(err){
console.log('\n连接PostgreSQL时出错');
throw err;
});
}

Methods.query = function(query){const start = Date.now();
return client.query(query)
.then(function(res){
const duration = Date.now()-start;
console.log('\nExecuted查询:{\n'+ query.text +'\n ['+ query.values +']'+'\n持续时间:'+持续时间+'\n行:'+ res.rows.length +'\n}');
return res;
})
.catch(function(err){
console.log('\n执行查询错误', err.stack);
});
}

Methods.disconnect = async function(){
await client.end()
.then(function(){
console.log ('\nConnection已经结束');
})
.catch(function(err){
console.log('\nsConnection关闭时出错');
throw err;
});
}

module.exports =方法;

scraper.js

  var cheerio = require('cheerio'); 
var request = require(’request’);
var util = require(’../ helpers / util.js’);
var postgreSQLlib = require(’../ middlewares / postgreSQLlib.js’);

var方法= {};

var国家= {
'意大利':'ITA',
'拉脱维亚':'LVA',
'荷兰':'NLD'
};

var outDir =’./output/’;
var finalData = outDir +‘coverage-eu.json’

var jsons = [];

Methods.download =异步函数(req,res){
for(国家/地区){
var url ='http://apps.who.int/immunization_monitoring / globalsummary / coverages?c ='+国家/地区[国家];

返回等待请求(url,(异步函数(country){
var thisCountry = country;

返回异步函数(error,res,html){
if(error){
抛出错误;
}

$ = cheerio.load(html);

var years = [] ;
var疫苗= [];
var覆盖率= [];

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

const numYears = years.leng th;
const numVaccines =疫苗长度。
for(var疫苗IDx = 0;疫苗Idx for(var yearIdx = 0; yearIdx //保存在数据库
const查询= {
文本:'INSERT INTO coverage(疫苗,国家,地区,年,值)值($ 1,$ 2,$ 3,$ 4,$ 5);',
值:[疫苗[疫苗IDx],国家/地区,'',年[yearIdxx],coverage [vaccineIdx * numYears + yearIdx]]
}
var queryRes = await postgreSQLlib.query(query);
//console.log(’Result:’,queryRes);
}
}
}
})(国家/地区));
}
};

module.exports =方法;

为什么?如果没有显示任何错误,我将无法解决错误。



对于我的英语不好,我们深表歉意。






编辑1



如果我使用SQL Shell(psql)插入记录,则可以:








编辑2



我修改了查询 console.log >方法:

  methods.query =异步函数(查询,打印){
返回等待client.query(查询)
.then(function(res){
console.log(print,'OK query');
return res;
})
.catch(function (err){
console.log(print,'ERR query');
});
}

scraper.js

  methods.download =异步功能(req,res){
for(国家/地区){
console.log( '\nCOUNTRY:',国家/地区); //添加
var url =‘http://apps.who.int/immunization_monitoring/globalsummary/coverages?c=’+国家/地区[country];
let res =等待请求(URL);
insert(res);
}
}

// ...

//保存到db
const queryInsert = {
文本: 将覆盖范围插入(疫苗,国家,地区,年份,价值)VALUES($ 1,$ 2,$ 3,$ 4,$ 5);,
值:[疫苗[vaccineIdx],国家/地区,'',年[yearIdx ],coverage [vaccineIdx * numYears + yearIdx]]
}
var printText ='[INSERT'+ country +'IN coverages'';
var queryRes =等待postgreSQLlib.query(queryInsert,printText);

这些是印刷品:

  START 

以admin(通过:admin)连接到localhost:5432的db(创建表覆盖)OK查询

国家:意大利

国家:拉脱维亚
[插入意大利IN保险范围]确定查询
[插入拉脱维亚IN保险范围]确定查询
[插入拉脱维亚IN保险范围]确定查询
[INSERT拉脱维亚IN覆盖率]确定查询
[INSERT拉脱维亚IN覆盖率]确定查询
[INSERT拉脱维亚IN覆盖率]确定查询
[INSERT拉脱维亚IN覆盖率]确定查询
[插入拉脱维亚IN保险范围]确定查询
[插入拉脱维亚IN保险范围]确定查询
[插入拉脱维亚IN保险范围]确定查询
[插入拉脱维亚IN保险范围]确定查询
[INSERT拉脱维亚IN保险范围]确定查询
[INSERT拉脱维亚IN保险范围]确定查询
[INSERT拉脱维亚IN保险范围]确定查询
[INSERT拉脱维亚IN保险范围]确定查询
[INSERT拉脱维亚IN覆盖率]确定查询
[插入拉脱维亚IN覆盖率]确定查询
[插入拉脱维亚I N个coverage] OK查询
[INSERT拉脱维亚IN coverage] OK查询
[INSERT拉脱维亚IN coverage] OK查询
[INSERT拉脱维亚IN coverage] OK查询
[INSERT拉脱维亚IN coverages ] OK查询
[INSERT拉脱维亚IN覆盖率] OK查询
[INSERT拉脱维亚IN覆盖率] OK查询
[INSERT拉脱维亚IN覆盖率] OK查询
[INSERT拉脱维亚IN覆盖率] OK查询
[插入拉脱维亚IN覆盖]确定查询
[插入拉脱维亚IN覆盖]确定查询
[插入拉脱维亚IN覆盖]确定查询
[插入拉脱维亚IN覆盖]确定查询
[INSERT拉脱维亚IN保险范围]确定查询
[INSERT拉脱维亚IN保险范围]确定查询
[INSERT拉脱维亚IN保险范围]确定查询
[INSERT拉脱维亚IN保险范围]确定查询
[INSERT拉脱维亚IN保险范围]确定查询
[INSERT拉脱维亚IN保险范围]确定查询
[INSERT拉脱维亚IN保险范围]确定查询
[INSERT拉脱维亚IN保险范围]确定查询
[ INSERT拉脱维亚IN覆盖率] OK查询
[INSERT拉脱维亚IN覆盖率] OK查询
[INSERT拉脱维亚IN覆盖率] OK查询
[INSERT拉脱维亚IN覆盖率] OK查询
[INSERT拉脱维亚IN覆盖率] OK查询
[INSERT拉脱维亚IN覆盖率] OK查询
[INSERT拉脱维亚IN覆盖率] OK查询
[插入拉脱维亚IN覆盖]确定查询
[插入拉脱维亚IN覆盖]确定查询
[插入拉脱维亚IN覆盖]确定查询
[插入拉脱维亚IN覆盖]确定查询
[INSERT拉脱维亚IN保险范围]确定查询
[INSERT拉脱维亚IN保险范围]确定查询
[INSERT拉脱维亚IN保险范围]确定查询
[INSERT拉脱维亚IN保险范围]确定查询
[INSERT拉脱维亚IN保险范围]确定查询
[INSERT拉脱维亚IN保险范围]确定查询
[INSERT拉脱维亚IN保险范围]确定查询
[INSERT拉脱维亚IN保险范围]确定查询
[ INSERT拉脱维亚IN覆盖率] OK查询
[INSERT拉脱维亚IN覆盖率] OK查询
[INSERT拉脱维亚IN覆盖率] OK查询
[INSERT拉脱维亚IN覆盖率] OK查询
[INSERT拉脱维亚IN覆盖率] OK查询
[插入拉脱维亚IN覆盖率] OK查询
[INSERT拉脱维亚IN覆盖率] OK查询
[INSERT拉脱维亚IN覆盖率]确定查询
[INSERT拉脱维亚IN覆盖率]确定查询
[INSERT拉脱维亚IN覆盖率]确定查询
[INSERT拉脱维亚IN覆盖率]确定查询
[插入拉脱维亚IN保险范围]确定查询
[插入拉脱维亚IN保险范围]确定查询
[插入拉脱维亚IN保险范围]确定查询
[插入拉脱维亚IN保险范围]确定查询
[INSERT拉脱维亚IN保险范围]确定查询
[INSERT拉脱维亚IN保险范围]确定查询
[INSERT拉脱维亚IN保险范围]确定查询
[INSERT拉脱维亚IN保险范围]确定查询
[INSERT拉脱维亚IN覆盖率]确定查询
[插入拉脱维亚IN覆盖率]确定查询
[插入拉脱维亚IN覆盖率]确定查询
[插入拉脱维亚IN覆盖率]确定查询
[插入拉脱维亚IN Coverage] OK查询
[INSERT拉脱维亚IN Coverage] OK查询
[INSERT拉脱维亚IN Coverage] OK查询
[INSERT拉脱维亚IN Coverage] OK查询
[INSERT拉脱维亚IN Coverage] OK查询
[插入拉脱维亚IN覆盖率] OK查询
[INSERT拉脱维亚IN覆盖率] OK查询
[INSER T拉脱维亚IN保险范围] OK查询
[INSERT拉脱维亚IN保险范围] OK查询
[INSERT拉脱维亚IN保险范围] OK查询
[INSERT拉脱维亚IN保险范围] OK查询
[INSERT拉脱维亚IN保险范围IN覆盖率] OK查询
[INSERT拉脱维亚IN覆盖率] OK查询
[INSERT拉脱维亚IN覆盖率] OK查询
[INSERT拉脱维亚IN覆盖率] OK查询
[INSERT拉脱维亚IN覆盖率] OK查询
[INSERT拉脱维亚IN覆盖率] OK查询
[INSERT拉脱维亚IN覆盖率] OK查询
[INSERT拉脱维亚IN覆盖率] OK查询
[INSERT拉脱维亚IN覆盖率] OK查询
[插入拉脱维亚IN覆盖]确定查询
[插入拉脱维亚IN覆盖]确定查询
[插入拉脱维亚IN覆盖]确定查询
[插入拉脱维亚IN覆盖]确定查询
[INSERT拉脱维亚IN保险范围]确定查询
[INSERT拉脱维亚IN保险范围]确定查询
[INSERT拉脱维亚IN保险范围]确定查询
[INSERT拉脱维亚IN保险范围]确定查询
[INSERT拉脱维亚IN承保范围]确定查询
[INSERT拉脱维亚IN承保范围]确定查询
[INSERT拉脱维亚IN承保范围Coverage] OK查询
[INSERT拉脱维亚IN Coverage] OK查询
[INSERT拉脱维亚IN Coverage] OK查询
[INSERT拉脱维亚IN Coverage] OK查询
[INSERT拉脱维亚IN Coverage] OK查询
[插入拉脱维亚IN覆盖率] OK查询
[INSERT拉脱维亚IN覆盖率] OK查询
[INSERT拉脱维亚IN覆盖率] OK查询
[INSERT拉脱维亚IN覆盖率] OK查询
[INSERT拉脱维亚IN覆盖率]确定查询
[INSERT拉脱维亚IN覆盖率]确定查询
[INSERT拉脱维亚IN覆盖率]确定查询
[INSERT拉脱维亚IN覆盖率]确定查询
[插入拉脱维亚IN保险范围]确定查询
[插入拉脱维亚IN保险范围]确定查询
[插入拉脱维亚IN保险范围]确定查询
[插入拉脱维亚IN保险范围]确定查询
[INSERT拉脱维亚IN保险范围]确定查询
[INSERT拉脱维亚IN保险范围]确定查询
[INSERT拉脱维亚IN保险范围]确定查询
[INSERT拉脱维亚IN保险范围]确定查询
[INSERT拉脱维亚IN承保范围]确定查询
[插入拉脱维亚IN承保范围]确定查询
[插入拉脱维亚IN承保范围] OK查询
[插入拉脱维亚IN覆盖率] OK查询
[INSERT拉脱维亚IN覆盖率] OK查询
[INSERT拉脱维亚IN覆盖率] OK查询
[INSERT拉脱维亚IN覆盖率] OK查询
[INSERT拉脱维亚IN覆盖率]确定查询
[INSERT拉脱维亚IN覆盖率]确定查询
[INSERT拉脱维亚IN覆盖率]确定查询
[INSERT拉脱维亚IN覆盖率]确定查询
[插入拉脱维亚IN保险范围]确定查询
[插入拉脱维亚IN保险范围]确定查询
[插入拉脱维亚IN保险范围]确定查询
[插入拉脱维亚IN保险范围]确定查询
[INSERT拉脱维亚IN保险范围]确定查询
[INSERT拉脱维亚IN保险范围]确定查询
[INSERT拉脱维亚IN保险范围]确定查询
[INSERT拉脱维亚IN保险范围]确定查询
[INSERT拉脱维亚IN覆盖率]确定查询
[插入拉脱维亚IN覆盖率]确定查询
[插入拉脱维亚IN覆盖率]确定查询
[插入拉脱维亚IN覆盖率]确定查询
[插入拉脱维亚IN Coverage] OK查询
[INSERT拉脱维亚IN coverage] OK查询
[INSERT Latvia IN coverage] OK查询
[插入拉脱维亚IN承保范围]确定查询

国家:荷兰
[插入拉脱维亚IN承保范围]确定查询
[插入拉脱维亚IN承保范围]确定查询
[插入荷兰IN承保范围]确定查询
[插入荷兰IN承保范围]确定查询
[插入荷兰IN承保范围]确定查询
[插入荷兰IN承保范围]确定查询
[插入荷兰IN承保范围]确定查询
[插入荷兰IN承保范围]确定查询
[插入荷兰IN承保范围]确定查询
[插入荷兰IN承保范围]确定查询
[INSERT荷兰IN承保范围Coverage] OK查询
[INSERT Netherlands IN coverage] OK查询
[INSERT Netherlands IN coverage] OK查询
[INSERT Netherlands IN coverage] OK查询
[INSERT Netherlands IN coverage]确定查询
[插入荷兰IN覆盖范围]确定查询
[插入荷兰IN覆盖范围]确定查询
[插入荷兰IN覆盖范围]确定查询
[插入荷兰IN覆盖范围]确定查询
[INSERT Netherlands IN覆盖范围] OK查询
[INSERT荷兰IN覆盖范围] OK查询
[INSERT Netherlands IN覆盖范围] OK查询
[INSERT Netherlands IN覆盖范围] OK查询
[INSERT Netherlands IN覆盖范围]确定查询
[插入荷兰IN范围]确定查询
[插入荷兰IN范围]确定查询
[插入荷兰IN范围]确定查询
[插入荷兰IN范围]确定查询
[插入荷兰IN覆盖范围]确定查询
[插入荷兰IN覆盖范围]确定查询
[插入荷兰IN覆盖范围]确定查询
[插入荷兰IN覆盖范围]确定查询
[插入荷兰IN承保范围]确定查询
[插入荷兰IN承保范围]确定查询
[插入荷兰IN承保范围]确定查询
[插入荷兰IN承保范围]确定查询
[插入荷兰IN承保范围]确定查询
[插入荷兰IN承保范围]确定查询
[插入荷兰IN承保范围]确定查询
[插入荷兰IN承保范围]确定查询
[插入网herlands IN保险范围] OK查询
[INSERT Netherlands IN保险范围] OK查询
[INSERT Netherlands IN保险范围] OK查询
[INSERT Netherlands IN保险范围] OK查询
[INSERT Netherlands IN Coverage] OK查询
[INSERT Netherlands IN coverage] OK查询
[INSERT Netherlands IN coverage] OK查询
[INSERT Netherlands IN coverage] OK查询
[INSERT Netherlands IN coverage]确定查询
[插入荷兰IN覆盖范围]确定查询
[插入荷兰IN覆盖范围]确定查询
[插入荷兰IN覆盖范围]确定查询
[插入荷兰IN覆盖范围]确定查询
[插入荷兰IN承保范围]确定查询
[插入荷兰IN承保范围]确定查询
[插入荷兰IN承保范围]确定查询
[插入荷兰IN承保范围]确定查询
[插入荷兰IN承保范围]确定查询
[插入荷兰IN承保范围]确定查询
[插入荷兰IN承保范围]确定查询
[插入荷兰IN承保范围]确定查询
[在插入荷兰IN覆盖范围]确定查询
[插入荷兰IN覆盖范围]确定查询
[插入荷兰IN覆盖范围]确定查询
[插入荷兰IN覆盖范围]确定查询
[插入荷兰IN覆盖范围] OK查询
[INSERT荷兰IN覆盖范围] OK查询
[INSERT Netherlands IN覆盖范围] OK查询
[INSERT Netherlands IN覆盖范围] OK查询
[INSERT Netherlands IN覆盖范围]确定查询
[插入荷兰IN范围]确定查询
[插入荷兰IN范围]确定查询
[插入荷兰IN范围]确定查询
[插入荷兰IN范围]确定查询
[插入荷兰IN覆盖范围]确定查询
[插入荷兰IN覆盖范围]确定查询
[插入荷兰IN覆盖范围]确定查询
[插入荷兰IN覆盖范围]确定查询
[插入荷兰IN覆盖范围]确定查询
[插入荷兰IN覆盖范围]确定查询
[插入荷兰IN覆盖范围]确定查询
[插入荷兰IN覆盖范围]确定查询
[插入荷兰IN承保范围]确定查询
[插入荷兰IN承保范围]确定查询
[插入荷兰IN承保范围]确定查询
[插入荷兰IN承保范围]确定查询
[插入荷兰IN承保范围]确定查询
[插入荷兰IN承保范围]确定查询
[插入荷兰IN承保范围]确定查询
[插入荷兰IN承保范围]确定查询
[插入荷兰IN承保范围]确定查询
[插入荷兰IN承保范围]确定查询
[插入荷兰IN承保范围]确定查询
[插入荷兰IN承保范围]确定查询
[插入荷兰IN承保范围]确定查询
[插入荷兰IN承保范围]确定查询
[插入荷兰IN承保范围]确定查询
[插入荷兰IN承保范围]确定查询
[INSERT荷兰IN承保范围Coverage] OK查询
[INSERT Netherlands IN coverage] OK查询
[INSERT Netherlands IN coverage] OK查询
[INSERT Netherlands IN coverage] OK查询
[INSERT Netherlands IN coverage] Ø K查询
[插入荷兰IN覆盖范围]确定查询
[插入荷兰IN覆盖范围]确定查询
[插入荷兰IN覆盖范围]确定查询
[插入荷兰IN覆盖范围]确定查询
[插入荷兰IN承保范围]确定查询
[插入荷兰IN承保范围]确定查询
[插入荷兰IN承保范围]确定查询
[插入荷兰IN承保范围]确定查询
[插入荷兰IN承保范围]确定查询
[插入荷兰IN承保范围]确定查询
[插入荷兰IN承保范围]确定查询
[插入荷兰IN承保范围]确定查询
[插入荷兰IN承保范围]确定查询
[插入荷兰IN承保范围]确定查询
[插入荷兰IN承保范围]确定查询
[插入荷兰IN承保范围]确定查询
[插入荷兰IN承保范围]确定查询
[插入荷兰IN承保范围]确定查询
[插入荷兰IN承保范围]确定查询
[插入荷兰IN承保范围]确定查询
[INSERT荷兰IN承保范围海湾愤怒] OK查询
[插入荷兰IN范围] OK查询
[插入荷兰IN范围] OK查询
[插入荷兰IN范围] OK查询
[插入荷兰IN范围]确定查询
[插入荷兰IN覆盖范围]确定查询
[插入荷兰IN覆盖范围]确定查询
[插入荷兰IN覆盖范围]确定查询
[插入荷兰IN覆盖范围]确定查询
[插入荷兰IN承保范围]确定查询
[插入荷兰IN承保范围]确定查询
[插入荷兰IN承保范围]确定查询
[插入荷兰IN承保范围]确定查询
[插入荷兰IN承保范围]确定查询
[插入荷兰IN承保范围]确定查询
[插入荷兰IN承保范围]确定查询
[插入荷兰IN承保范围]确定查询
[插入荷兰IN承保范围]确定查询
[插入荷兰IN承保范围]确定查询
[插入荷兰IN承保范围]确定查询
[插入荷兰IN承保范围]确定查询
[插入荷兰IN覆盖范围] OK查询
[INSERT荷兰IN覆盖范围] OK查询
[INSERT Netherlands IN覆盖范围] OK查询
[INSERT Netherlands IN覆盖范围] OK查询
[INSERT Netherlands IN覆盖范围]确定查询
[插入荷兰IN范围]确定查询
[插入荷兰IN范围]确定查询
[插入荷兰IN范围]确定查询
[插入荷兰IN范围]确定查询
[插入荷兰IN覆盖范围]确定查询
[插入荷兰IN覆盖范围]确定查询
[插入荷兰IN覆盖范围]确定查询
[插入荷兰IN覆盖范围]确定查询
[插入荷兰IN承保范围]确定查询
[插入荷兰IN承保范围]确定查询
[插入荷兰IN承保范围]确定查询
[插入荷兰IN承保范围]确定查询
[插入荷兰IN承保范围]确定查询
[插入荷兰IN承保范围]确定查询
[插入荷兰IN承保范围]确定查询
[插入荷兰IN承保范围]确定查询
[插入网herlands IN保险范围] OK查询
[INSERT Netherlands IN保险范围] OK查询
[INSERT Netherlands IN保险范围] OK查询
[INSERT Netherlands IN保险范围] OK查询
[INSERT Netherlands IN Coverage] OK查询
[INSERT Netherlands IN coverage] OK查询
[INSERT Netherlands IN coverage] OK查询
[INSERT Netherlands IN coverage] OK查询
[INSERT Netherlands IN coverage]确定查询
[插入荷兰IN覆盖范围]确定查询
[插入荷兰IN覆盖范围]确定查询
[插入荷兰IN覆盖范围]确定查询
[插入荷兰IN覆盖范围]确定查询
[插入荷兰IN承保范围]确定查询
[插入荷兰IN承保范围]确定查询
[插入荷兰IN承保范围]确定查询
[插入荷兰IN承保范围]确定查询
[插入荷兰IN承保范围]确定查询
[插入荷兰IN承保范围]确定查询
[插入荷兰IN承保范围]确定查询
[插入荷兰IN承保范围]确定查询
[在插入荷兰IN覆盖范围]确定查询
[插入荷兰IN覆盖范围]确定查询
[插入荷兰IN覆盖范围]确定查询
[插入荷兰IN覆盖范围]确定查询
[插入荷兰IN覆盖范围] OK查询
[INSERT荷兰IN覆盖范围] OK查询
[INSERT Netherlands IN覆盖范围] OK查询
[INSERT Netherlands IN覆盖范围] OK查询
[INSERT Netherlands IN覆盖范围]确定查询
[插入荷兰IN范围]确定查询
[插入荷兰IN范围]确定查询
[插入荷兰IN范围]确定查询
[插入荷兰IN范围]确定查询
[插入荷兰IN覆盖范围]确定查询
[插入荷兰IN覆盖范围]确定查询
[插入荷兰IN覆盖范围]确定查询
[插入荷兰IN覆盖范围]确定查询
[插入荷兰IN覆盖范围]确定查询
[插入荷兰IN覆盖范围]确定查询
[插入荷兰IN覆盖范围]确定查询
[插入荷兰IN覆盖范围]确定查询
[插入荷兰IN承保范围]确定查询
[插入荷兰IN承保范围]确定查询
[插入荷兰IN承保范围]确定查询
[插入荷兰IN承保范围]确定查询
[插入荷兰IN承保范围]确定查询

连接已结束

完成
[插入荷兰IN承保范围] ERR查询

如您所见,由于连接已关闭,最后出现错误。
此外,与查询结果相关的打印不按国家/地区排序。例如:

 国家/地区:意大利

国家/地区:拉脱维亚
[在覆盖范围内插入意大利]确定查询
[插入拉脱维亚IN保险范围]确定查询
[插入拉脱维亚IN保险范围]确定查询

国家/地区:意大利下没有任何内容,但是有关意大利查询的结果却在国家/地区:拉脱维亚下(并且还没有全部)。

解决方案

app.js文件中有两个错误。

  const postgreSQLlib = require('./ middlewares / postgreSQLlib.js')
const downloaderCoverageIta = require('./ routers / scraper.js');

const start = async function(){
//连接
等待postgreSQLlib.connect();

//创建表
var queryCreateCoverages = {
文本:'如果不存在覆盖,则创建表('+
'疫苗VARCHAR(64),'+
'国家VARCHAR(255)'+
'区域VARCHAR(255),'+
'年份VARCHAR(4),'+
'值VARCHAR(12),' +
'PRIMARY KEY(疫苗,国家/地区,年份))'
};
var queryRes =等待postgreSQLlib.query(queryCreateCoverages);
//console.log(’Result:’,queryRes);

//获取数据
等待downloaderCoverageIta.download();

常量查询= {
文本:'SELECT * FROM Coverage国家/地区= $ 1',
值:['意大利']
}
返回等待postgreSQLlib.query(query);
//console.log(’Result:’,queryRes);

//断开
等待postgreSQLlib.disconnect();
}

//启动应用程序
start()
.then(function(res){
console.log(res);
})
.catch(function(err){
console.log(err);
});

首先,您没有使用正确的变量 downloaderCoverageIta,然后就没有返回值。



srcapper.js文件中的

  var cheerio = require('cheerio '); 
var request = require('request-promise');
var util = require(’../ helpers / util.js’);
var postgreSQLlib = require(’./ postgreSQLlib.js’);

var方法= {};

var国家= {
'意大利':'ITA',
'拉脱维亚':'LVA',
'荷兰':'NLD'
};

var outDir =’./output/’;
var finalData = outDir +‘coverage-eu.json’

var jsons = [];

methods.download =异步函数(req,res){
等待Promise.all(Object.values(countries).map(async country => {
var url =
'http://apps.who.int/immunization_monitoring/globalsummary/coverages?c='+国家;

const html =等待请求(URL);
$ = cheerio.load(html);

var年= [];
var疫苗= [];
var覆盖率= [];

$('。ts .year')。each(function(){
years.push($(this).text()。trim());
});
$ ('.ts .odd td a,.ts .even td a')。each(function(){
疫苗.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 =疫苗s.length;
for(var 0;疫苗编号 for(var yearIdx = 0; yearIdx< numYears; yearIdx ++){
let obj = {
year:years [yearIdx],
国家/地区:国家/地区,
地区:,
疫苗:疫苗[vaccineIdx],
coverage:coverages [vaccineIdx * numYears + yearIdx]
}

//保存在db
const查询= {
文本:'INSERT INTO coverages (疫苗,国家/地区,
地区,年份,值)VALUES($ 1,$ 2,$ 3,$ 4,$ 5)',
值:[vaccines [vaccineIdx],国家/地区,'',
years [yearIdx],coverage [vaccineIdx * numYears + yearIdx]],
}
var queryRes =等待postgreSQLlib.query(query);

//保存到文件
jsons.push(obj);
}
}
等待util.printOnFile(jsons,finalData);
}))
}

module.exports =方法;

据我所知,请求模块不适用于异步等待。



< img src = https://i.stack.imgur.com/JoOiy.png alt =在此处输入图像描述>
这是我在运行代码后从pg管理员那里获得的。 / p>

I'm creating my first app using Node.js and PostgreSQL. This app connect to db, create table, do web scraping of a web site, insert info to db and then disconnect from db. I'm trying to do using async/await.

The problem is that the insert operation doesn't work. There is no errors, simply table coverages remains empty.

This is my code.

app.js:

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

const start = async function() {
    await console.log('START');

    // connect
    await postgreSQLlib.connect();

    // 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);
    //console.log('Result: ', queryRes);

    // get data
    await scraper.download();

    const query = {
        text: 'SELECT * FROM coverages;',
        values: ['Italy']
    }
    var queryRes = await postgreSQLlib.query(query);
    //console.log('Result: ', queryRes);

    // disconnect 
    await postgreSQLlib.disconnect();

    return 'FINISH';
}

// start application
start()
    .then(function(res) {
        console.log(res);
    })
    .catch(function(err) {
        console.log(err);
    });

postgreSQLlib.js:

var fs = require('fs');
const {Client} = require('pg'); // node-postgres npm package

const userDb = 'admin';
const passDb = 'admin';
const hostDb = 'localhost'; // default
const portDb = '5432'; // default
const nameDb = 'db'; 
const connectionString = 'postgres://' + userDb + ':' + passDb + '@' + hostDb + ':' + portDb + '/' + nameDb; // result is '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 = function(query) {const start = Date.now();
    return client.query(query)
    .then(function(res) {
        const duration = Date.now() - start;
        console.log('\nExecuted query: {\n  ' + query.text + '\n  [' + query.values + ']' + '\n  duration: '+ duration + '\n  rows: ' + res.rows.length + '\n}');
        return res;
    })
    .catch(function(err) { 
        console.log('\nError executing query', err.stack);
    });
}

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

module.exports = methods;

scraper.js:

var cheerio = require('cheerio');
var request = require('request');
var util = require('../helpers/util.js');
var postgreSQLlib = require('../middlewares/postgreSQLlib.js');

var methods = {};

var countries = {
    'Italy': 'ITA',
    'Latvia': 'LVA',
    'Netherlands': 'NLD'
};

var outDir = './output/';
var finalData = outDir + 'coverage-eu.json'

var jsons = [];

methods.download = async function(req, res) {
    for(country in countries) {
        var url = 'http://apps.who.int/immunization_monitoring/globalsummary/coverages?c=' + countries[country];

        return await request(url, (async function(country) {
            var thisCountry = country;

            return async function(error, res, html) {
                if(error) {
                    throw error;
                }

                $ = 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++) {
                        // save on db
                        const query = {
                            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 queryRes = await postgreSQLlib.query(query);
                        //console.log('Result: ', queryRes);
                    } 
                }
            } 
        })(country));
    } 
};

module.exports = methods;

Why? I can't solve the error if no errors are showed.

Any help is appreciate and sorry for my bad english.


EDIT 1

If I use SQL shell (psql) to insert records, it works:


EDIT 2

I modified the console.log of the query method:

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');
    });
}

scraper.js:

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

//...

// 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);

These are the prints:

START

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

COUNTRY: Italy

COUNTRY: Latvia
[INSERT Italy IN coverages] OK query
[INSERT Latvia IN coverages] OK query
[INSERT Latvia IN coverages] OK query
[INSERT Latvia IN coverages] OK query
[INSERT Latvia IN coverages] OK query
[INSERT Latvia IN coverages] OK query
[INSERT Latvia IN coverages] OK query
[INSERT Latvia IN coverages] OK query
[INSERT Latvia IN coverages] OK query
[INSERT Latvia IN coverages] OK query
[INSERT Latvia IN coverages] OK query
[INSERT Latvia IN coverages] OK query
[INSERT Latvia IN coverages] OK query
[INSERT Latvia IN coverages] OK query
[INSERT Latvia IN coverages] OK query
[INSERT Latvia IN coverages] OK query
[INSERT Latvia IN coverages] OK query
[INSERT Latvia IN coverages] OK query
[INSERT Latvia IN coverages] OK query
[INSERT Latvia IN coverages] OK query
[INSERT Latvia IN coverages] OK query
[INSERT Latvia IN coverages] OK query
[INSERT Latvia IN coverages] OK query
[INSERT Latvia IN coverages] OK query
[INSERT Latvia IN coverages] OK query
[INSERT Latvia IN coverages] OK query
[INSERT Latvia IN coverages] OK query
[INSERT Latvia IN coverages] OK query
[INSERT Latvia IN coverages] OK query
[INSERT Latvia IN coverages] OK query
[INSERT Latvia IN coverages] OK query
[INSERT Latvia IN coverages] OK query
[INSERT Latvia IN coverages] OK query
[INSERT Latvia IN coverages] OK query
[INSERT Latvia IN coverages] OK query
[INSERT Latvia IN coverages] OK query
[INSERT Latvia IN coverages] OK query
[INSERT Latvia IN coverages] OK query
[INSERT Latvia IN coverages] OK query
[INSERT Latvia IN coverages] OK query
[INSERT Latvia IN coverages] OK query
[INSERT Latvia IN coverages] OK query
[INSERT Latvia IN coverages] OK query
[INSERT Latvia IN coverages] OK query
[INSERT Latvia IN coverages] OK query
[INSERT Latvia IN coverages] OK query
[INSERT Latvia IN coverages] OK query
[INSERT Latvia IN coverages] OK query
[INSERT Latvia IN coverages] OK query
[INSERT Latvia IN coverages] OK query
[INSERT Latvia IN coverages] OK query
[INSERT Latvia IN coverages] OK query
[INSERT Latvia IN coverages] OK query
[INSERT Latvia IN coverages] OK query
[INSERT Latvia IN coverages] OK query
[INSERT Latvia IN coverages] OK query
[INSERT Latvia IN coverages] OK query
[INSERT Latvia IN coverages] OK query
[INSERT Latvia IN coverages] OK query
[INSERT Latvia IN coverages] OK query
[INSERT Latvia IN coverages] OK query
[INSERT Latvia IN coverages] OK query
[INSERT Latvia IN coverages] OK query
[INSERT Latvia IN coverages] OK query
[INSERT Latvia IN coverages] OK query
[INSERT Latvia IN coverages] OK query
[INSERT Latvia IN coverages] OK query
[INSERT Latvia IN coverages] OK query
[INSERT Latvia IN coverages] OK query
[INSERT Latvia IN coverages] OK query
[INSERT Latvia IN coverages] OK query
[INSERT Latvia IN coverages] OK query
[INSERT Latvia IN coverages] OK query
[INSERT Latvia IN coverages] OK query
[INSERT Latvia IN coverages] OK query
[INSERT Latvia IN coverages] OK query
[INSERT Latvia IN coverages] OK query
[INSERT Latvia IN coverages] OK query
[INSERT Latvia IN coverages] OK query
[INSERT Latvia IN coverages] OK query
[INSERT Latvia IN coverages] OK query
[INSERT Latvia IN coverages] OK query
[INSERT Latvia IN coverages] OK query
[INSERT Latvia IN coverages] OK query
[INSERT Latvia IN coverages] OK query
[INSERT Latvia IN coverages] OK query
[INSERT Latvia IN coverages] OK query
[INSERT Latvia IN coverages] OK query
[INSERT Latvia IN coverages] OK query
[INSERT Latvia IN coverages] OK query
[INSERT Latvia IN coverages] OK query
[INSERT Latvia IN coverages] OK query
[INSERT Latvia IN coverages] OK query
[INSERT Latvia IN coverages] OK query
[INSERT Latvia IN coverages] OK query
[INSERT Latvia IN coverages] OK query
[INSERT Latvia IN coverages] OK query
[INSERT Latvia IN coverages] OK query
[INSERT Latvia IN coverages] OK query
[INSERT Latvia IN coverages] OK query
[INSERT Latvia IN coverages] OK query
[INSERT Latvia IN coverages] OK query
[INSERT Latvia IN coverages] OK query
[INSERT Latvia IN coverages] OK query
[INSERT Latvia IN coverages] OK query
[INSERT Latvia IN coverages] OK query
[INSERT Latvia IN coverages] OK query
[INSERT Latvia IN coverages] OK query
[INSERT Latvia IN coverages] OK query
[INSERT Latvia IN coverages] OK query
[INSERT Latvia IN coverages] OK query
[INSERT Latvia IN coverages] OK query
[INSERT Latvia IN coverages] OK query
[INSERT Latvia IN coverages] OK query
[INSERT Latvia IN coverages] OK query
[INSERT Latvia IN coverages] OK query
[INSERT Latvia IN coverages] OK query
[INSERT Latvia IN coverages] OK query
[INSERT Latvia IN coverages] OK query
[INSERT Latvia IN coverages] OK query
[INSERT Latvia IN coverages] OK query
[INSERT Latvia IN coverages] OK query
[INSERT Latvia IN coverages] OK query
[INSERT Latvia IN coverages] OK query
[INSERT Latvia IN coverages] OK query
[INSERT Latvia IN coverages] OK query
[INSERT Latvia IN coverages] OK query
[INSERT Latvia IN coverages] OK query
[INSERT Latvia IN coverages] OK query
[INSERT Latvia IN coverages] OK query
[INSERT Latvia IN coverages] OK query
[INSERT Latvia IN coverages] OK query
[INSERT Latvia IN coverages] OK query
[INSERT Latvia IN coverages] OK query
[INSERT Latvia IN coverages] OK query
[INSERT Latvia IN coverages] OK query
[INSERT Latvia IN coverages] OK query
[INSERT Latvia IN coverages] OK query
[INSERT Latvia IN coverages] OK query
[INSERT Latvia IN coverages] OK query
[INSERT Latvia IN coverages] OK query
[INSERT Latvia IN coverages] OK query
[INSERT Latvia IN coverages] OK query
[INSERT Latvia IN coverages] OK query
[INSERT Latvia IN coverages] OK query
[INSERT Latvia IN coverages] OK query
[INSERT Latvia IN coverages] OK query
[INSERT Latvia IN coverages] OK query
[INSERT Latvia IN coverages] OK query
[INSERT Latvia IN coverages] OK query
[INSERT Latvia IN coverages] OK query
[INSERT Latvia IN coverages] OK query
[INSERT Latvia IN coverages] OK query
[INSERT Latvia IN coverages] OK query
[INSERT Latvia IN coverages] OK query
[INSERT Latvia IN coverages] OK query
[INSERT Latvia IN coverages] OK query
[INSERT Latvia IN coverages] OK query

COUNTRY: Netherlands
[INSERT Latvia IN coverages] OK query
[INSERT Latvia IN coverages] OK query
[INSERT Netherlands IN coverages] OK query
[INSERT Netherlands IN coverages] OK query
[INSERT Netherlands IN coverages] OK query
[INSERT Netherlands IN coverages] OK query
[INSERT Netherlands IN coverages] OK query
[INSERT Netherlands IN coverages] OK query
[INSERT Netherlands IN coverages] OK query
[INSERT Netherlands IN coverages] OK query
[INSERT Netherlands IN coverages] OK query
[INSERT Netherlands IN coverages] OK query
[INSERT Netherlands IN coverages] OK query
[INSERT Netherlands IN coverages] OK query
[INSERT Netherlands IN coverages] OK query
[INSERT Netherlands IN coverages] OK query
[INSERT Netherlands IN coverages] OK query
[INSERT Netherlands IN coverages] OK query
[INSERT Netherlands IN coverages] OK query
[INSERT Netherlands IN coverages] OK query
[INSERT Netherlands IN coverages] OK query
[INSERT Netherlands IN coverages] OK query
[INSERT Netherlands IN coverages] OK query
[INSERT Netherlands IN coverages] OK query
[INSERT Netherlands IN coverages] OK query
[INSERT Netherlands IN coverages] OK query
[INSERT Netherlands IN coverages] OK query
[INSERT Netherlands IN coverages] OK query
[INSERT Netherlands IN coverages] OK query
[INSERT Netherlands IN coverages] OK query
[INSERT Netherlands IN coverages] OK query
[INSERT Netherlands IN coverages] OK query
[INSERT Netherlands IN coverages] OK query
[INSERT Netherlands IN coverages] OK query
[INSERT Netherlands IN coverages] OK query
[INSERT Netherlands IN coverages] OK query
[INSERT Netherlands IN coverages] OK query
[INSERT Netherlands IN coverages] OK query
[INSERT Netherlands IN coverages] OK query
[INSERT Netherlands IN coverages] OK query
[INSERT Netherlands IN coverages] OK query
[INSERT Netherlands IN coverages] OK query
[INSERT Netherlands IN coverages] OK query
[INSERT Netherlands IN coverages] OK query
[INSERT Netherlands IN coverages] OK query
[INSERT Netherlands IN coverages] OK query
[INSERT Netherlands IN coverages] OK query
[INSERT Netherlands IN coverages] OK query
[INSERT Netherlands IN coverages] OK query
[INSERT Netherlands IN coverages] OK query
[INSERT Netherlands IN coverages] OK query
[INSERT Netherlands IN coverages] OK query
[INSERT Netherlands IN coverages] OK query
[INSERT Netherlands IN coverages] OK query
[INSERT Netherlands IN coverages] OK query
[INSERT Netherlands IN coverages] OK query
[INSERT Netherlands IN coverages] OK query
[INSERT Netherlands IN coverages] OK query
[INSERT Netherlands IN coverages] OK query
[INSERT Netherlands IN coverages] OK query
[INSERT Netherlands IN coverages] OK query
[INSERT Netherlands IN coverages] OK query
[INSERT Netherlands IN coverages] OK query
[INSERT Netherlands IN coverages] OK query
[INSERT Netherlands IN coverages] OK query
[INSERT Netherlands IN coverages] OK query
[INSERT Netherlands IN coverages] OK query
[INSERT Netherlands IN coverages] OK query
[INSERT Netherlands IN coverages] OK query
[INSERT Netherlands IN coverages] OK query
[INSERT Netherlands IN coverages] OK query
[INSERT Netherlands IN coverages] OK query
[INSERT Netherlands IN coverages] OK query
[INSERT Netherlands IN coverages] OK query
[INSERT Netherlands IN coverages] OK query
[INSERT Netherlands IN coverages] OK query
[INSERT Netherlands IN coverages] OK query
[INSERT Netherlands IN coverages] OK query
[INSERT Netherlands IN coverages] OK query
[INSERT Netherlands IN coverages] OK query
[INSERT Netherlands IN coverages] OK query
[INSERT Netherlands IN coverages] OK query
[INSERT Netherlands IN coverages] OK query
[INSERT Netherlands IN coverages] OK query
[INSERT Netherlands IN coverages] OK query
[INSERT Netherlands IN coverages] OK query
[INSERT Netherlands IN coverages] OK query
[INSERT Netherlands IN coverages] OK query
[INSERT Netherlands IN coverages] OK query
[INSERT Netherlands IN coverages] OK query
[INSERT Netherlands IN coverages] OK query
[INSERT Netherlands IN coverages] OK query
[INSERT Netherlands IN coverages] OK query
[INSERT Netherlands IN coverages] OK query
[INSERT Netherlands IN coverages] OK query
[INSERT Netherlands IN coverages] OK query
[INSERT Netherlands IN coverages] OK query
[INSERT Netherlands IN coverages] OK query
[INSERT Netherlands IN coverages] OK query
[INSERT Netherlands IN coverages] OK query
[INSERT Netherlands IN coverages] OK query
[INSERT Netherlands IN coverages] OK query
[INSERT Netherlands IN coverages] OK query
[INSERT Netherlands IN coverages] OK query
[INSERT Netherlands IN coverages] OK query
[INSERT Netherlands IN coverages] OK query
[INSERT Netherlands IN coverages] OK query
[INSERT Netherlands IN coverages] OK query
[INSERT Netherlands IN coverages] OK query
[INSERT Netherlands IN coverages] OK query
[INSERT Netherlands IN coverages] OK query
[INSERT Netherlands IN coverages] OK query
[INSERT Netherlands IN coverages] OK query
[INSERT Netherlands IN coverages] OK query
[INSERT Netherlands IN coverages] OK query
[INSERT Netherlands IN coverages] OK query
[INSERT Netherlands IN coverages] OK query
[INSERT Netherlands IN coverages] OK query
[INSERT Netherlands IN coverages] OK query
[INSERT Netherlands IN coverages] OK query
[INSERT Netherlands IN coverages] OK query
[INSERT Netherlands IN coverages] OK query
[INSERT Netherlands IN coverages] OK query
[INSERT Netherlands IN coverages] OK query
[INSERT Netherlands IN coverages] OK query
[INSERT Netherlands IN coverages] OK query
[INSERT Netherlands IN coverages] OK query
[INSERT Netherlands IN coverages] OK query
[INSERT Netherlands IN coverages] OK query
[INSERT Netherlands IN coverages] OK query
[INSERT Netherlands IN coverages] OK query
[INSERT Netherlands IN coverages] OK query
[INSERT Netherlands IN coverages] OK query
[INSERT Netherlands IN coverages] OK query
[INSERT Netherlands IN coverages] OK query
[INSERT Netherlands IN coverages] OK query
[INSERT Netherlands IN coverages] OK query
[INSERT Netherlands IN coverages] OK query
[INSERT Netherlands IN coverages] OK query
[INSERT Netherlands IN coverages] OK query
[INSERT Netherlands IN coverages] OK query
[INSERT Netherlands IN coverages] OK query
[INSERT Netherlands IN coverages] OK query
[INSERT Netherlands IN coverages] OK query
[INSERT Netherlands IN coverages] OK query
[INSERT Netherlands IN coverages] OK query
[INSERT Netherlands IN coverages] OK query
[INSERT Netherlands IN coverages] OK query
[INSERT Netherlands IN coverages] OK query
[INSERT Netherlands IN coverages] OK query
[INSERT Netherlands IN coverages] OK query
[INSERT Netherlands IN coverages] OK query
[INSERT Netherlands IN coverages] OK query
[INSERT Netherlands IN coverages] OK query
[INSERT Netherlands IN coverages] OK query
[INSERT Netherlands IN coverages] OK query
[INSERT Netherlands IN coverages] OK query
[INSERT Netherlands IN coverages] OK query
[INSERT Netherlands IN coverages] OK query
[INSERT Netherlands IN coverages] OK query
[INSERT Netherlands IN coverages] OK query
[INSERT Netherlands IN coverages] OK query
[INSERT Netherlands IN coverages] OK query
[INSERT Netherlands IN coverages] OK query
[INSERT Netherlands IN coverages] OK query
[INSERT Netherlands IN coverages] OK query
[INSERT Netherlands IN coverages] OK query
[INSERT Netherlands IN coverages] OK query
[INSERT Netherlands IN coverages] OK query
[INSERT Netherlands IN coverages] OK query
[INSERT Netherlands IN coverages] OK query
[INSERT Netherlands IN coverages] OK query
[INSERT Netherlands IN coverages] OK query
[INSERT Netherlands IN coverages] OK query
[INSERT Netherlands IN coverages] OK query
[INSERT Netherlands IN coverages] OK query
[INSERT Netherlands IN coverages] OK query
[INSERT Netherlands IN coverages] OK query
[INSERT Netherlands IN coverages] OK query
[INSERT Netherlands IN coverages] OK query
[INSERT Netherlands IN coverages] OK query
[INSERT Netherlands IN coverages] OK query
[INSERT Netherlands IN coverages] OK query
[INSERT Netherlands IN coverages] OK query
[INSERT Netherlands IN coverages] OK query
[INSERT Netherlands IN coverages] OK query
[INSERT Netherlands IN coverages] OK query
[INSERT Netherlands IN coverages] OK query
[INSERT Netherlands IN coverages] OK query
[INSERT Netherlands IN coverages] OK query
[INSERT Netherlands IN coverages] OK query
[INSERT Netherlands IN coverages] OK query
[INSERT Netherlands IN coverages] OK query
[INSERT Netherlands IN coverages] OK query
[INSERT Netherlands IN coverages] OK query
[INSERT Netherlands IN coverages] OK query
[INSERT Netherlands IN coverages] OK query
[INSERT Netherlands IN coverages] OK query
[INSERT Netherlands IN coverages] OK query
[INSERT Netherlands IN coverages] OK query
[INSERT Netherlands IN coverages] OK query
[INSERT Netherlands IN coverages] OK query
[INSERT Netherlands IN coverages] OK query
[INSERT Netherlands IN coverages] OK query
[INSERT Netherlands IN coverages] OK query
[INSERT Netherlands IN coverages] OK query
[INSERT Netherlands IN coverages] OK query
[INSERT Netherlands IN coverages] OK query
[INSERT Netherlands IN coverages] OK query
[INSERT Netherlands IN coverages] OK query
[INSERT Netherlands IN coverages] OK query
[INSERT Netherlands IN coverages] OK query

Connection has ended

FINISH
[INSERT Netherlands IN coverages] ERR query

As you can see, there is an error at the end because the connection is already closed. In addition, prints related to the query result are not ordered with respect to the country. For example:

COUNTRY: Italy

COUNTRY: Latvia
[INSERT Italy IN coverages] OK query
[INSERT Latvia IN coverages] OK query
[INSERT Latvia IN coverages] OK query

There is nothing below COUNTRY: Italy, but results about Italy queries are below COUNTRY: Latvia (and there are not all).

解决方案

There are two mistakes in app.js file.

const postgreSQLlib = require('./middlewares/postgreSQLlib.js')
const downloaderCoverageIta = require('./routers/scraper.js');

const start = async function() {
    // connect
    await postgreSQLlib.connect();

    // create tables
    var queryCreateCoverages = {
        text: 'CREATE TABLE IF NOT EXISTS coverages ('+
                    'vaccine VARCHAR(64),' + 
                    'country VARCHAR(255),' +
                    'region VARCHAR(255),' +
                    'year VARCHAR(4),' +
                    'value VARCHAR(12),' +
                    'PRIMARY KEY(vaccine, country, region, year))'
    };
    var queryRes = await postgreSQLlib.query(queryCreateCoverages);
    //console.log('Result: ', queryRes);

    // get data
    await downloaderCoverageIta.download();

    const query = {
        text: 'SELECT * FROM coverages WHERE country = $1',
        values: ['Italy']
    }
    return await postgreSQLlib.query(query);
    //console.log('Result: ', queryRes);

    // disconnect 
    await postgreSQLlib.disconnect();
}

// start application
start()
.then(function(res) {
    console.log(res);
})
.catch(function(err) {
    console.log(err);
});

First you were not using right var "downloaderCoverageIta" then you were not returning the value.

And few in srcapper.js file

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

var methods = {};

var countries = {
'Italy': 'ITA',
'Latvia': 'LVA',
'Netherlands': 'NLD'
};

var outDir = './output/';
var finalData = outDir + 'coverage-eu.json'

var jsons = [];

methods.download = async function(req, res) {
await Promise.all(Object.values(countries).map(async country=> {
    var url = 
'http://apps.who.int/immunization_monitoring/globalsummary/coverages?c=' + country;

    const html = await request(url);
    $ = 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 query = {
                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 queryRes = await postgreSQLlib.query(query);

            // save on file
            jsons.push(obj);
        }
    }
    await util.printOnFile(jsons, finalData);
}))
}

module.exports = methods;

As per I know request module does not work with the async await. This worked for me atleast.

This is from my pg admin after i run the code.

这篇关于使用Node.js和PostgreSQL的INSERT操作不起作用的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆