首页 > 解决方案 > 无法使用 knexjs 创建表

问题描述

我正在尝试使用 knexjs 创建一个表,但是它并没有创建表,我尝试观看教程,他正在迁移文件中创建表,但是我真的不喜欢这种方法,因为它不遵循 MVC ,因此我想知道如何让自己的方式发挥作用。

它目前没有创建表,但它没有抛出错误,我也想知道这是否会自动生成迁移或我应该为此做些什么,如果这是正确的做法,或者我是否应该实际上是只需将其全部写入迁移文件即可。

这是我的代码

class Tasks {
    constructor() {
        try {
            db.schema.createTable('tasks', table => {
                table.increments('id');
                table.string('task', 128)
                    .notNullable();
                table.boolean('completed');
                table.timestamp('created_at').defaultTo(knex.fn.now());
            });
        } catch(err) {
            console.error(err);
        }
    }
}

标签: mysqlnode.jsknex.js

解决方案


您需要使用 执行查询生成器await,但这不能在构造函数中完成。

因此,您要么需要创建一个单独的异步函数来运行表创建,要么只需触发查询并存储承诺

class Tasks {
    constructor() {
        try {
          this.initPromise = db.schema.createTable('tasks', table => {
                table.increments('id');
                table.string('task', 128)
                    .notNullable();
                table.boolean('completed');
                table.timestamp('created_at').defaultTo(knex.fn.now());
            }).then();
        } catch(err) {
            console.error(err);
        }
    }
}

推荐阅读