node.js和PostgreSQL查询 - 抛出新的TypeError('第一个参数必须是字符串或缓冲区');

时间:2014-05-18 10:05:41

标签: javascript node.js postgresql postgis

我正在尝试使用nodejs从PostGIS启用的PostgreSQL数据库中获取随机几何,但是当我尝试进行第一次查询时,为了获得数据集中“max”自动生成的顺序ID,它会抛出以上错误。我认识到错误是因为它期望字符串而不是数字值,但由于'gid'字段是数字,我不知道如何解决这个问题。

任何帮助解释问题/修复它以便我可以从数据库中获取随机对象将非常有帮助。提前谢谢。

var db = new pg.Client(conString);
db.connect();

function getRandObj(){
    var max = db.query( " SELECT MAX(`gid`) FROM `buildings` ");
    //var min = db.query( " SELECT MIN(`gid`) FROM `buildings` ");
    //var random = mt_rand( min , max );
    //var result = db.query( " ST_AsGeoJSON(geom) FROM `buildings` WHERE `gid` >= random LIMIT 0,1 ");
    //return result
}

1 个答案:

答案 0 :(得分:1)

我没有过多地讨论node.js,但是,我已经尝试了一点。在这里查看您的代码:

var max = db.query( " SELECT MAX(`gid`) FROM `buildings` ");

我看到了一些潜在的问题。首先,反引号。我认为他们是个错误。将该查询更改为:

var max = db.query( " SELECT MAX(gid) FROM buildings ");

或者,如果您真的想在那里看到引号,您应该使用“名称”引号,例如:

var max = db.query( ' SELECT MAX("gid") FROM "buildings" ');

第二件事是返回值。我不认为你会得到这样的直接回报。你尝试过这样的事情:

var max = -1;
q = db.query(' SELECT MAX("gid") FROM "buildings" as mx ');

q.on('row', function (row) {
    console.log(row);
    max = row.mx;
};
console.log("max is %d", max);

-g