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



我们使用knex.js生成和执行SQL。在向现有表中添加字段时,我们遇到了捕获错误的问题,并且文档没有涵盖这个特定的用例。尝试添加重复字段确实会在控制台(VSCODE)中返回错误,但没有对错误调用任何标准事件,因此我们无法在代码中捕获它。这是代码:

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控制台中返回:

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

但是,没有调用任何回调。添加字段时如何检查错误?

UPDATE#1此代码将调用回调,但显然没有任何错误信息。而且,控制台中也会出现相同的错误:

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

UPDATE#2不使用以下代码调用回调:

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

UPDATE#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回调方法而不是使用promise方法来解决这个问题。此代码工作一致:

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);

相关内容

  • 没有找到相关文章

最新更新