使用Knex更新PostgreSQL数组时遇TypeError: knex.raw is not a function
错误原因及解决办法
出现TypeError: knex.raw is not a function的核心原因是你代码里的knex变量并不是初始化后的Knex实例,具体分两种常见情况:
情况1:调用了未定义的
knex变量
你代码里操作数据库用的是db(比如db('users')),说明db是你已经配置好的Knex实例,但调用raw方法时误用了未定义或未正确初始化的knex变量。正确做法是用db.raw替代knex.raw。修改后的代码:
app.put('/groceryList', (req, res) => { const { id, listUpdated } = req.body; db('users') .where('id', '=', id) .update({ grocerylist: db.raw('array_append(grocerylist, ?)', listUpdated) }) .catch(err => res.status(400).json('error returning grocery list')) })情况2:导入的是Knex构造函数而非实例
如果你的代码里knex是直接导入的Knex库(比如const knex = require('knex')),这只是构造函数,不是已经连接数据库的实例。必须先通过配置初始化实例后才能调用raw方法,而你代码里的db就是这个已初始化的实例,所以直接用db.raw即可。
额外提醒:PostgreSQL的array_append仅支持添加单个元素,如果listUpdated是数组类型,想要批量添加元素应该改用array_cat函数。
内容的提问来源于stack exchange,提问作者user20393015
相关产品推荐
相关产品推荐

