2016-12-25 25 views
0

过去,我可以使用与Heroku上托管的数据库连接的koa-pg中间件连接到postgres数据库,但我在连接到一个本地托管的数据库。在本地主机上无法使用koa上的koa-pg中间件查询PG数据库

具体而言,我的错误是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似乎没有被定义。说得通?

相关问题