【问题标题】:node.js and PostgreSQL query - throw new TypeError('first argument must be a string or Buffer');node.js 和 PostgreSQL 查询 - throw new TypeError('first argument must be a string or Buffer');
【发布时间】:2014-05-18 22:23:57
【问题描述】:

我正在尝试使用 nodejs 从启用 PostGIS 的 PostgreSQL 数据库中获取随机几何图形,但是当我尝试执行第一个查询时,为了获取数据集中自动生成的“最大”顺序 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
}

【问题讨论】:

    标签: javascript node.js postgresql postgis


    【解决方案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

    【讨论】:

    • 谢谢。我才刚刚开始使用节点,并且正在努力解决它。删除反引号解决了我的查询问题,我认为您对退货的看法是正确的,但我将不得不从它的外观上做更多的研究。再次感谢。
    猜你喜欢
    • 2012-05-15
    • 2022-12-26
    • 1970-01-01
    • 2018-06-07
    • 2021-11-23
    • 2016-11-13
    • 1970-01-01
    • 2019-12-29
    相关资源
    最近更新 更多