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

标签 javascript arrays node.js pg

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

例子

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


来源:pg-promise#csv-filter

关于javascript - 将数组传递给函数 - PG 和 NodeJS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53818018/

相关文章:

javascript - 从excel复制粘贴,单元格换行符和行分隔符之间的区别

javascript - 每个选项卡的 session - Google Chrome 扩展

javascript - 暂时忽略Meteor Template中的点击事件

javascript - 触发全局事件 Polymer 2

c - 在C中使用字符串作为数组中的索引

c++ - 内置数组大小的类型是多少?

javascript - 当其中一个用于生成随机数时,Javascript 中的双方括号符号如何工作?

javascript - 是否可以在运行时使用 Node.js 中的函数生成对象?

node.js - 收到错误 "throw new TypeError(' JwtStrategy 需要 key 或 key ');"

javascript - 将函数传递、接收和使用到子组件中