【问题标题】:Loopback accessToken is null when using transaction使用事务时,Loopback accessToken 为空
【发布时间】:2016-02-16 20:35:33
【问题描述】:

我在我的 Loopback 应用中发现了一个奇怪的行为。我将尝试在下面描述它。

我有一个 BaseModel,我的所有模型都从该 BaseModel 继承,在“access”和“beforeSave”上有操作钩子,用于填充多租户的列。它需要访问当前用户,我按如下方式获取它:

var httpContext = require('loopback').getCurrentContext();
var accessToken = httpContext.get('accessToken');
const userId = accessToken && accessToken.userId;

然后,我的一个模型需要在第二个模型中插入记录。 Model1 和 Model2 具有一对一的关系。我已经为它添加了一个远程方法,我在一个事务中执行它,如下所示:

Model1.beginTransaction({ isolationLevel: Model1.Transaction.READ_COMMITTED })
.then(function(tx) {
    transaction = tx;
    return Model1.create({ paramId: param }, { transaction: transaction });
})
.then(function(model1) {
    return Model2.create({ model1: model1 }, { transaction: transaction });
})
.then(function(model2) {
    model2Instance = model2;
    return transaction.commit();
})
.then(function() {
    cb(null, model2Instance);
})
.catch(function(err) {
    if (transaction) {
        transaction.rollback(function(rbe) {
            cb(err, null);
        });
        return;
    }
    cb(err, null);
})

在运行 Model2.create 步骤时,由于 accessToken 未定义,挂钩失败。

如果我确实从我的模型调用中删除了 { transaction: transaction },则两个记录都已成功创建,尽管没有按预期使用数据库事务。

我错过了什么?

【问题讨论】:

    标签: node.js loopbackjs


    【解决方案1】:

    已尝试在环回中使用事务,但没有成功,原因是环回端的文档不完整或非描述性。

    最好使用http://knexjs.org/ 来构建查询和事务。

    这是一个相同的参考链接。 How To Implement ACID Transactions in Loopback http://knexjs.org/#Transactions

    【讨论】:

      猜你喜欢
      • 2020-03-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-04
      相关资源
      最近更新 更多