使用 Knex.JS 添加字段时如何捕获错误

How To Catch Errors When Adding a Field With Knex.JS

我们正在使用 knex.js 生成并执行 SQL。我们在向现有 table 添加字段时遇到错误,而 documentation 不涵盖此特定用例。尝试添加重复字段会 return 控制台中出现错误 (VSCODE),但 none 的标准事件会在出现错误时被调用,因此我们无法将其捕获在代码中。这是代码:

knex.schema.table(tableName, function(table) {

    table.string('test').catch(function(e) {
        callback(e)
    });

}).then(function(e) {
    callback(e);
}).catch(function(e) {
    callback(e);
})

这是在 VSCODE 控制台中 return 编辑的:

{ [TypeError: table.string(...).catch is not a function] 'error@context': { accessToken: undefined } }

但是,调用了 none 个回调。添加字段时如何检查错误?

UPDATE #1这段代码会调用回调,但显然没有任何错误信息。而且,不管怎样,控制台中都会出现相同的错误:

table.string('test').catch(
    callback(null, Lib.returnEvent(false))
);

更新 #2 没有调用以下代码的回调:

knex.schema.table(tableName, function(table) {
    table.string('ddd');
}).then(function(e) {
    callback(e);
}).catch(function(e) {
    callback(e);
})

更新 #3 在本例中,调用了第一个回调,但函数在后续调用中挂起:

knex.schema.table(tableName, function(table) {
    table.string('ddd');
    callback(true);
}).then(function(e) {
    callback(true, e);
}).catch(function(e) {
    callback(false, e);
})

我能够通过切换到 Knex 回调方法而不是使用承诺方法来解决这个问题。此代码始终有效:

knex.schema.table(tableName, function(table) {

    table.string(tableFieldname);

}).asCallback(function(err) {

    if (err) {
       callback(false, err);
    } else {
       callback(true);
    }
})

这对我有用

return knex('users')
        .insert({
          username: req.body.username,
          password: hash,
        })
        .returning('*')
        .bind(console)
        .then(console.log)
        .catch(console.error);