将事务添加到 sequelize

Add transaction to sequelize

我开始使用 sequelize 创建一个 API,但我遇到了交易问题。

我的 sequelize 数据库配置如下所示:


import databaseConfig from '../config/database';

import User from '../app/models/User';
import File from '../app/models/File';
import Address from '../app/models/Address';
import Customer from '../app/models/Customer';
import Product from '../app/models/Product';
import ServiceOrder from '../app/models/ServiceOrder';
import OrderStatus from '../app/models/OrderStatus';

const models = [
  User,
  File,
  Address,
  Customer,
  Product,
  ServiceOrder,
  OrderStatus,
];

class Database {
  constructor() {
    this.init();
  }

  async init() {
    this.connection = new Sequelize(databaseConfig);

    models
      .map(model => model.init(this.connection))
      .map(model => model.associate && model.associate(this.connection.models));
  }
}

export default new Database();

然后我有一个 orderStatusController,它具有像这样保存在数据库中的功能:

import sequelize from 'sequelize';
import OrderStatus from '../models/OrderStatus';

class OrderStatusController {
  async store(req, res) {
    sequelize
      .transaction(t => {
        return OrderStatus.create(
          {
            description: 'Aguardando Orçamento',
          },
          { transaction: t }
        );
      })
      .then(result => res.json(result))
      .catch(err => res.json({ error: err }));
  }
}

export default new OrderStatusController();

我收到交易不是函数错误。

解决此问题的最佳方法是什么? 我读到我需要实例化sequelize,但是我已经有一个数据库配置。

有什么方法可以使用我的数据库配置吗? 我不想在控制器中创建另一个 "new Sequelize()"。

感谢您的帮助。

这是一种方法。 my_db_app 服务器代码:

const sequelizeDB  = new Sequelize( myConfigOptions ); 

// other code...

server.listen(myPort, () => {

  sequelizeDB.Promise = global.Promise;
  sequelizeDB
      .authenticate()
      .then(() =>   { console.log('connected!');})
      .catch(err => { console.error(err);});

  // for controllers or models ...
  module.exports = {sequelizeDB : sequelizeDB}

然后需要事务的控制器可以导入数据库对象:

   const db_app = require("../my_db_app");
   const sequelizeDB = db_app.sequelizeDB;

   // other code...

    sequelizeDB.transaction(function (myTransaction) {                    

        User.create({name: 'Joe', { transaction: myTransaction })
        .catch(function(error) {
           console.log("Error in User Create");
           throw error;
        });

        // other code on same transaction here...

    }).then(function () {
        console.log("SUCCESS!");
        next();
    }).catch(function (err) {
        console.log("FAILURE !");
    });

HTH