将事务添加到 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
我开始使用 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