You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Bookshelf与Knex创建视图失败:schema.createView不是函数

解决knex@0.17.6中createView不存在的迁移错误

你使用的knex@0.17.6版本不支持knex.schema.createView这个API,该方法是在更高版本的knex中才引入的,所以直接调用会抛出knex.schema.createView is not a function错误。

针对你的需求,有两种可行的解决方式:

方式一:使用原生SQL语句创建视图(推荐,兼容当前版本)

直接通过knex.raw执行MySQL原生的创建/删除视图语句,替代不支持的链式API:

exports.up = function(knex, Promise) {
  // 执行创建视图的原生SQL
  return knex.raw(`
    CREATE VIEW sp_form_view AS
    SELECT first_name FROM sp_form WHERE id > 20
  `);
};

exports.down = function(knex, Promise) {
  // 执行删除视图的原生SQL,加IF EXISTS避免视图不存在时报错
  return knex.raw(`DROP VIEW IF EXISTS sp_form_view`);
};

方式二:升级knex版本(需注意兼容性)

如果要使用createView链式API,需要将knex升级到支持该方法的版本(knex@0.20.0及以上版本引入了createView)。但要注意:你的bookshelf@0.14.2声明的依赖knex版本范围是^0.16.0 || ^0.17.0,升级knex到0.20+可能会出现兼容性问题,需要充分测试。

升级命令:

npm install knex@^0.20.0 --save

升级后,你原来的迁移代码即可正常使用。

内容的提问来源于stack exchange,提问作者UdayanBKamble

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 01:17:05