将数组传递给Postgresql查询-Node.js

时间:2018-08-30 07:39:44

标签: node.js postgresql

我似乎在将数组传递给查询并使用IN条件时遇到问题,当我将每个搜索词手动添加到查询中时,我都能成功获取结果

async function getFixtures() {
  let response;
  try {
    response = await pool.query("SELECT * FROM fixtures WHERE league_name IN ('Chinese Super League', 'Iran Pro League', 'English Premier League')");
  } catch (e) {
    console.error('Error Occurred', e);
  }
    return response.rows;
}

当我尝试传递数组但没有返回结果时

async function getFixtures(leaguesArray) {
  let response;
  try {
    response = await pool.query("SELECT * FROM fixtures WHERE league_name IN ($1)", [leaguesArray]);
  } catch (e) {
    console.error('Error Occurred', e);
  }
    return response.rows;
}

当我注销leaguesArray时,它将返回

['Chinese Super League', 'Iran Pro League', 'English Premier League']

所以当它传递给查询时,我认为它是

[['Chinese Super League', 'Iran Pro League', 'English Premier League']]

我需要将该初始数组转换为字符串吗?

我显然在这里错过了一些东西,但是不确定什么

谢谢

2 个答案:

答案 0 :(得分:0)

正如docs所述。我相信您使用两种方法

方法1

request.onloadend = () => {
   if (request.status == 401) {
      this.goBack();
   }
}

方法2

<div class="button">
    <a onclick="window.open('http://example.com/2nd_page#2nd_id');" href="http://example.com/1st_page#1st_id">Read more</a>
</div>

答案 1 :(得分:0)

我遇到了同样的问题,我用包 pg-format 解决了它。

对于 WHERE IN,您可以这样使用它:

import format from 'pg-format';

response = await pool.query(format("SELECT * FROM fixtures WHERE league_name IN (%L)", leaguesArray));

注意:现在,pool.query 只接受一个参数,format 接受模板 + 变量以生成有效的 SQL 请求。