SQL-запрос postgres выдает ошибку в узле JS - PullRequest
0 голосов
/ 29 мая 2019

Я установил 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);

Но когда я использую тот же запрос в узле J (см. Ниже), я получаю сообщение об ошибке, говорящее 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 Ответ

0 голосов
/ 04 июня 2019

Получил ответ.Вместо start и end я использовал аргументы с использованием синтаксиса $1 ... и добавил тип данных аргументов.В моем случае 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);
...