简体   繁体   English

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

[英]node.js and PostgreSQL query - throw new TypeError('first argument must be a string or Buffer');

I am trying to get a random geometry from a PostGIS enabled PostgreSQL database using nodejs, but when I attempt to even do the first query, to get the 'max' automatically-generated, sequential ID in the dataset, it throws the above error. 我试图使用nodejs从启用PostGIS的PostgreSQL数据库中获取随机几何,但是当我什至尝试执行第一个查询时,要在数据集中获取“ max”自动生成的顺序ID,则会引发上述错误。 I recognise that the error is because it's expecting a string rather than a numeric value, but as the 'gid' field is numeric, i'm not sure how to solve this. 我知道该错误是因为它期望使用字符串而不是数字值,但是由于“ gid”字段是数字,因此我不确定如何解决此问题。

Any help explaining the issue/fixing it so I can get my random object from the database would be extremely helpful. 任何帮助解释问题/解决问题的帮助都将非常有帮助,以便我可以从数据库中获取随机对象。 Thanks in advance. 提前致谢。

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
}

I haven't messed with node.js too much, but, I have experimented a little. 我并没有对node.js太过困惑,但是,我做了一些实验。 Looking at your code here: 在这里查看您的代码:

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

I see a couple of potential issues. 我看到几个潜在的问题。 First, the backquotes. 首先,反引号。 I think they are a mistake. 我认为这是一个错误。 Change that query to read: 将该查询更改为:

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

Or, if you really want to see quotes in there, you should be using "name" quotes, like: 或者,如果您真的想在其中看到引号,则应使用“名称”引号,例如:

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

The second thing is the return value. 第二件事是返回值。 I don't think you get direct returns like that. 我认为您不会获得直接的回报。 Have you tried something like this: 您是否尝试过以下方法:

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 -G

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 遇到node.js TypeError:第一个参数必须是字符串或具有尽可能简单脚本的Buffer - running into node.js TypeError: First argument must be a string or Buffer with the simplest possible script 抛出信息 TypeError:第一个参数必须是字符串或Buffer - throw message; TypeError: first argument must be a string or Buffer “第一个参数必须是字符串或缓冲区” - 遵循 w3schools 的 Node.js 教程时出错 - "First argument must be a string or Buffer"- error when following w3schools' Node.js tutorial node.js请求POST数组“第一个参数必须是字符串或缓冲区” - node.js request POST array “first argument must be string or buffer” Node.js TypeError:path必须是字符串或Buffer - Node.js TypeError: path must be a string or Buffer 如何避免第一个参数必须是字符串或缓冲区节点js - How avoid first argument must be a string or Buffer node js TypeError:第一个参数必须是字符串或Buffer。 Java脚本 - TypeError: First argument must be a string or Buffer. Javascript 未处理的Promise拒绝警告:TypeError:第一个参数必须是字符串或缓冲区 - Unhandled Promise rejection warning: TypeError: First argument must be a string or Buffer TypeError [ERR_INVALID_ARG_TYPE]:“路径”参数必须是字符串类型 Node.JS - TypeError [ERR_INVALID_ARG_TYPE]: The “path” argument must be of type string Node.JS 500 TypeError:在express.js,node.js中不是字符串或缓冲区 - 500 TypeError: Not a string or buffer in express.js,node.js
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM