繁体   English   中英

postgres SQL查询在节点JS中抛出错误

[英]postgres SQL query throws error in node JS

我设置了一个API,在客户端用户可以计算到点之间的路由。 但是,我遇到了psql查询的麻烦,它在postgres中工作,但是当我在节点JS中使用相同的查询时,我收到了一个错误。

我正在使用nodeJS,Express和Postgres。 如果我在pgAdmin4中运行下面的查询,我会得到预期的输出。

SELECT b.gid, b.the_geom, b.cost_s, b.length_m FROM pgr_dijkstra('SELECT gid::bigint as id, source::bigint, 
                                           target::bigint, cost_s::double precision as cost, 
                                           reverse_cost_s::double precision as reverse_cost FROM ways 
                                           WHERE the_geom && ST_Expand((SELECT ST_Collect(the_geom) 
                                           FROM ways_vertices_pgr WHERE id IN(589143, 581050)), 0.01)', 
589143, 581050) a LEFT JOIN ways b ON (a.edge = b.gid);

但是当我在Node Js中使用相同的查询(见下文)时,我收到一条错误消息,指出error: syntax error at or near "&&" 我究竟做错了什么?

const start = parseInt(request.params.start)
const end = parseInt(request.params.end)

const sql2 = 
     "SELECT b.gid, b.the_geom, b.cost_s, b.length_m FROM pgr_dijkstra('SELECT gid::bigint as id, source::bigint,"+
     "target::bigint, cost_s::double precision as cost," +
     "reverse_cost_s::double precision as reverse_cost FROM ways" + 
     "WHERE the_geom && ST_Expand((SELECT ST_Collect(the_geom)" + 
     "FROM ways_vertices_pgr WHERE id IN(" + start + "," + end + ")), 0.01)'," +
      start + "," + end + ") a LEFT JOIN ways b ON (a.edge = b.gid);"

得到了答案。 我使用语法$1 ...而不是startend ,并添加了参数的数据类型。 在我的情况下, ineteger

SELECT b.gid, b.the_geom, b.cost_s, b.length_m FROM pgr_dijkstra('SELECT gid::bigint as id, source::bigint, 
                                           target::bigint, cost_s::double precision as cost, 
                                           reverse_cost_s::double precision as reverse_cost FROM ways 
                                           WHERE the_geom && ST_Expand((SELECT ST_Collect(the_geom) 
                                           FROM ways_vertices_pgr WHERE id IN(' || $1::integer || ',' || $2::integer ||')), 0.01)', 
    $1::integer, $2::integer) a LEFT JOIN ways b ON (a.edge = b.gid);

暂无
暂无

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

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM