2016-12-25 4 views
0

В прошлом мне удалось подключиться к postgres db с использованием промежуточного программного обеспечения koa-pg, подключенного к базе данных, размещенной на Heroku, но у меня возникают проблемы с подключением к локально размещенная база данных.Не удалось запросить базу данных PG с использованием промежуточного программного обеспечения koa-pg на Koa на localhost

В частности, у меня есть ошибка TypeError: Cannot read property 'client' of undefined.

Следующая моя установка на одном файле приложения:

const koa = require('koa'); 
let route = require('koa-route'); // For calling specific routes 
let request = require('koa-request'); // For RESTful requests 
let paramify = require('koa-params'); 
var koaPg = require('koa-pg'); 
let pg = require('pg'); // .native; 
let cors = require('koa-cors'); 
let parser = require('xml2js').parseString; 

// pg.defaults.ssl = true; 

route = paramify(route); 
let param = route.param; 
let get = route.get; 

let app = koa(); 
let appPort = (process.env.PORT || 3000) 
app.use(cors()); 
app.use(koaPg('postgres://localhost:5432/ttc_clustering_dev')); 

И следующий путь, на котором этот вопрос лежит:

app.use(route.get('/initialDefaultRouteQuery', function *() { 
    let options = { 
    url: 'http://webservices.nextbus.com/service/publicXMLFeed?command=vehicleLocations&a=ttc&r=60' 
    } 
    let xmlResponse = yield request(options) 
    let jsResponse = '' 
    parser(xmlResponse.body, function(err,result){ 
    //Extract the value from the data element 
    jsResponse = result 
    if (err !== null) { 
     console.log(`Error: ${err}`) 
    } else { 
     console.log('Success in parsing from XML to JSON') 
    } 
    }); 

    let i = 0 
    while (i < jsResponse.body.vehicle.length) { 
    let query_content = `INSERT INTO temp_records (route_id, bus_id, capture_time, geometry) VALUES ('60', '${jsResponse.body.vehicle[i].$.id}', ${Date.now() - (jsResponse.body.vehicle[i].$.secsSinceReport * 1000)}, ST_GeomFromText('POINT(${jsResponse.body.vehicle[i].$.lng} ${jsResponse.body.vehicle[i].$.lat})'))` 

    let result = yield pg.db.client.query_(query_content) 
    console.log('result:' + result) 
    i += 1; 
    } 
    this.body = 'Finished!' 
})); 

Вероятно, я использовал правильную установку в соответствии с the docs, но, вероятно, что-то мне не хватает здесь. Кто-нибудь еще видит, где я падаю?

Полный файл можно найти здесь: https://github.com/brianbancroft/ttc-clustering/blob/add-records-to-db/server/app.js

ответ

1

Благодаря документации должно быть:

let result = yield this.pg.db.client.query_(query_content) 

вместо

let result = yield pg.db.client.query_(query_content) 

Так this. отсутствует.

И, анализируя ваш код, вы явно требуете pg, поэтому ваш код вызывает этот код вместо одного из koa-pg. Поэтому pg.db, похоже, не определяется. Имеет смысл?