0

私は、postgreSQL 9.1、postGIS 2.0、nodejs 0.10.12、およびノー​​ドの pg モジュールの最新バージョンを使用しています。

サーバー側で Websocket を使用します。私には2つの機能があります。ユーザーからのデータに応じて、適切な関数を呼び出します。

最初の関数はシンプルSELECTで、正常に動作します。

2 番目は、指定されたジオメトリ (ポイント、ライン、またはポリゴン) の 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();
});
}

そして、これは、クエリの構文をどのように編集しても、私が得るエラーです

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)

何かアドバイスはありますか?ヒント?

前もって感謝します

スレビン

編集

「badsyntax」が尋ねたように、「je」変数の値の例を次に示します。 [object Object] を設定すると、これが得られconnection.send('</br>'+je+'</br>')ます。

また、これはクライアント側の openlayers から取得したものと、サーバーに送信したものです。 POINT(2332239.3475 4729773.7440625) 奇妙な...クライアント側では、openlayers を使用して、マップに挿入されたフィーチャのジオメトリを取得します。

4

1 に答える 1

0

このような場合、最初のステップは、問題がどこにあるかを分離することです。

  1. あなたのクエリは psql から動作しますか? そうでない場合は、ここ、gis、または dba で質問してください。

  2. クエリが psql で機能する場合、問題は nodejs にあります。よく調べて、おそらくここで別の質問を作成するか、開発者などとメーリング リストでフォローアップすることをお勧めします。

あなたのエラーは Node.js によってスローされているように見えますが、これがバグなのか (この場合は電子メール リストが最適です)、それとも SQL にあるのかを判断するのは困難です。関数に何が渡されているのかわかりません。

補足として、jeをサニタイズする方法を見つける必要があります。それ以外の場合は、SQL インジェクションの問題を求めています。

于 2013-11-07T10:05:51.167 に答える