Как мне исправить: сообщение bind содержит 3 параметра, но для подготовленного оператора "" требуется 2, ошибка в избыточности? - PullRequest
0 голосов
/ 31 декабря 2018

В настоящее время у меня есть запрос на расстояние, которое работает.
Я пытаюсь добавить другой параметр для type, чтобы упорядочить по обоим параметрам.Когда я добавляю параметр type, я получаю сообщение об ошибке:

В сообщении связывания содержится 3 параметра, но для подготовленного оператора "" требуется 2

router.get('/:lat/:lon/:type', (req, res) => {
console.log('location GET local route');
let queryText = `SELECT *, distance($1, $2, location.latitude, location.longitude) as distance FROM location ORDER BY distance, type;`
pool.query(queryText, [req.params.lat, req.params.lon, req.params.type])
.then((result) => {
    res.send(result.rows);
    // console.log(result.rows)
}).catch((error) => {
    console.log(error);
    res.sendStatus(500);
});
});

1 Ответ

0 голосов
/ 31 декабря 2018

Ваш запрос не использует третий параметр, поэтому вы получаете эту ошибку:

SELECT *, distance($1, $2, location.latitude, location.longitude) as distance FROM location ORDER BY distance, type;

Это можно исправить, удалив третий параметр:

pool.query(queryText, [req.params.lat, req.params.lon, req.params.type])

в:

pool.query(queryText, [req.params.lat, req.params.lon])

или если вы хотите использовать третий параметр в порядке по предложению, вам нужно заменить type на $3:

SELECT *, distance($1, $2, location.latitude, location.longitude) as distance FROM location ORDER BY distance, $3;

ОБНОВЛЕНИЕ

Если вы хотите сортировать только по типу, а не по расстоянию, удалите его из запроса:

SELECT *, distance($1, $2, location.latitude, location.longitude) as distance FROM location ORDER BY $3;
...