我使用postgreSQL 9.1,postGIS 2.0,nodejs 0.10.12和节点的pg模块的最新版本。
我在服务器端使用websockets。我有两个功能。根据来自用户的数据,我调用了正确的功能。
第一个函数是一个简单的SELECT
,工作正常。
第二个尝试找到给定几何的5个最近邻居(它可以是点或线或多边形)。不行。我尝试了最近邻居查询的不同语法,但仍然没有。
可能有什么不对?查询?我想也许pg模块不支持ST_DWithin
功能。
这是最近邻函数的代码
function checkMapIn(je){
var conString = "pg://username:password@localhost:5432/myDB";
var client = new pg.Client(conString);
client.connect();
//je came from client, is a geometry he just inserted in the map
var query = client.query('SELECT pins.p_name FROM pins ORDER BY pins.p_geom <-> '+je+' LIMIT 5')
//alternative syntax I tried
//SELECT pins.p_name FROM pins INNER JOIN pins ON ST_DWithin('+je+', pins.p_geom, 1000) LIMIT 5
//SELECT pins.p_name FROM pins WHERE ST_DWithin('+je+', pins.p_geom, 1000) LIMIT 5
query.on("row", function (row, result) {
result.addRow(row);});
query.on("end", function (result) {
console.log(JSON.stringify(result.rows, null, " "));
for (var i=0; i<result.rows.length; i++){
connection.send(result.rows[i].p_name+'</br>')
}
client.end();
});
}
这是我得到的错误,无论我如何编辑查询的synatx
events.js:72
throw er; // Unhandled 'error' event
^
error: syntax error at or near "["
at Connection.parsE (C:\Program Files (x86)\nodejs\node_modules\pg\lib\connection.js:526:11)
at Connection.parseMessage (C:\Program Files (x86)\nodejs\node_modules\pg\lib\connection.js:371:17)
at Socket.(anonymous) (C:\Program Files (x86)\nodejs\node_modules\pg\lib\connection.js:86:20)
at Socket.EventEmitter.emit (events.js:95:17)
at Socket.(anonymous) (_stream_readable.js:736:14)
at Socket.EventEmitter.emit (events.js:92:17)
at emitReadable_ (_stream_readable.js:408:10)
at emitReadable (_stream_readable.js:404:5)
at readableAddChunk (_stream_readable.js:156:9)
at Spcket.Readable.push (_stream_readable.js:127:10)
有什么建议吗?提示?
提前致谢
斯莱文
修改
以下是'je'变量的示例值,正如“badsyntax”所述。
[object Object]
如果我设置connection.send('</br>'+je+'</br>')
,我会得到这个。
此外,这是我从客户端的openlayers和我发送到服务器的内容。
POINT(2332239.3475 4729773.7440625)
奇怪的...
在客户端,我使用openlayers来获取刚刚插入地图的要素几何。
答案 0 :(得分:0)
在这种情况下,您的第一步是将问题分开。
您的查询是否适用于psql?如果没有,您可能想在这里,在gis或dba上询问。
如果您的查询在psql中有效,那么您的问题出在nodejs中。您可能需要仔细查看并在此处创建另一个问题,或者与开发人员等跟进电子邮件列表。
你的错误看起来好像是由Node.js引发的,但很难说这是否是一个错误(在这种情况下电子邮件列表最好),或者它是否在你的sql中。我不知道你的功能传递了什么。
作为旁注,你需要找到一种消毒方法。否则,您要求SQL注入问题。