Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/lua/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 将数组传递给函数-PG和NodeJS_Javascript_Arrays_Node.js_Pg - Fatal编程技术网

Javascript 将数组传递给函数-PG和NodeJS

Javascript 将数组传递给函数-PG和NodeJS,javascript,arrays,node.js,pg,Javascript,Arrays,Node.js,Pg,在我的NodeJS应用程序中使用pg,我希望能够将数组传递给函数,这样我就可以使用中的语句作为查询的一部分 范例 async function myMethod(array) { // array looks like [ '83', '82', '54', '55', '79' ] for example let response; try { response = await pool.query("SELECT * FROM fixtures WHERE id IN($

在我的NodeJS应用程序中使用
pg
,我希望能够将数组传递给函数,这样我就可以使用
中的
语句作为查询的一部分

范例

async function myMethod(array) {
  // array looks like [ '83', '82', '54', '55', '79' ] for example
  let response;
  try {
    response = await pool.query("SELECT * FROM fixtures WHERE id IN($1)", [array]);
  } catch (e) {
    console.log(e);
  }
  return response.rows;
}
我犯了一个错误

{ error: invalid input syntax for integer: "{"83","82","54","55","79"}"

我该如何在这里构建我的查询呢?

您最好的选择是:

pool.query("SELECT * FROM fixtures WHERE id IN($1:list)", [array]);
// [1,2,3]→"SELECT * FROM fixtures WHERE id IN(1,2,3)"
当变量以
:list
结尾时,它将被格式化为逗号分隔值的列表,每个值都根据其JavaScript类型进行格式化

您需要这样做的原因是默认情况下数组被格式化为PostgreSQL数组,正如您所看到的那样,用大括号表示


注:这已添加到v7.5.1中的
pg
(或者更确切地说,
pg promise
)。如果您使用的是早期版本,请改用
$1:csv



来源:

您是否尝试将数组转换为字符串?Querys应该获得字符串对象来准备语句。感谢您的帮助,我认为我不应该在以下位置或附近获得
错误:语法错误“
并且我已经安装了
pg
,我是否需要添加
pg promise
才能工作?@Richlewis
pg
是相对于
pg promise
的日期,我发现你还是在使用承诺(在你的代码中,
wait
),所以是的,不要承诺
pg
,只需切换到
pg promise
。在
npmi
之后,只需执行
const pg=require('pg-promise')
即可,应用程序中不会有任何更改。