使用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
相关产品推荐
相关产品推荐

