#mysql #node.js #sequelize.js
#mysql #node.js #sequelize.js
Вопрос:
Я хочу обновить таблицу кошелька, когда я вносил сумму в кошелек.
Мой код выглядит следующим образом:
модель wallet.js
'use strict';
module.exports = (sequelize, DataTypes) => {
var Model = sequelize.define('wallet', {
id: {
type: DataTypes.INTEGER,
field: 'id',
primaryKey: true,
autoIncrement: true
},
cid: {
type: DataTypes.STRING,
field: 'cid'
},
deposit: {
type: DataTypes.INTEGER,
field: 'deposit'
},
withdrawal: {
type: DataTypes.INTEGER,
field: 'withdrawal'
},
available: {
type: DataTypes.INTEGER,
field: 'available',
},
comments: {
type: DataTypes.DATE,
field: 'comments'
},
online: {
type: DataTypes.STRING,
field: 'online'
}
}, {
tableName: 'wallet',
timestamps: false
});
Model.associate = function (models) {
this.orders = this.hasOne(models.orders, {
as: 'orders',
foreignKey: 'wid'
});
};
Model.prototype.toWeb = function (pw) {
let json = this.toJSON();
return json;
};
return Model;
};
здесь происходит пополнение кошелька, здесь я использую метод set для обновления кошелька
walletcontroller.js
const deposit = async function (req, res) {
res.setHeader('Content-Type', 'application/json');
let err, wallet, existingWallet;
let wallet_info = req.body;
[err, existingWallet] = await to(Wallet.findAll({
limit: 1,
where: {
cid: wallet_info.cid,
},
order: [
['id', 'DESC']
]
}));
[err, wallet] = await to(Wallet.set(wallet_info, {
limit: 1,
where: {
cid: wallet_info.cid,
},
order: [
['id', 'DESC']
]
}));
if (err) return ReE(res, err, 422);
if (existingWallet[0] != 'undefined') {
wallet.available = existingWallet[0].available wallet_info.deposit;
wallet.comments = new Date();
} else {
wallet.available = wallet_info.deposit;
wallet.comments = new Date();
}
console.log("avalible balance:" wallet.available);
[err, wallet] = await to(wallet.save());
if (err) return ReE(res, err, 422);
return ReS(res, {
wallet: wallet.toWeb()
}, 201);
}
module.exports.deposit = deposit;
пожалуйста, помогите мне, как обновить кошелек… когда я вызываю api здесь, мое сообщение об ошибке выглядит следующим образом
Executing (default): SELECT `id`, `cid`, `deposit`, `withdrawal`, `available`, `comments`, `online` FROM `wallet` AS `wallet` WHERE `wallet`.`cid` = '33' ORDER BY `wallet`.`id` DESC LIMIT 1;
Ошибка:
Uncaught Error { filename: '\cl-api-master\controllers\WalletController.js',
line: 67,
row: 37,
message: 'Wallet.set is not a function',
type: 'TypeError',
stack: 'TypeError: Wallet.set is not a functionn at deposit (E:\cl-api-master\controllers\WalletController.js:67:37)n at <anonymous>',
arguments: undefined }
POST /v1/wallet/deposit - - ms - -
Комментарии:
1. Что означает строка «await to(Wallet.set(wallet_info, {«? Я думаю, что для моделей недоступна функция .set.
2. как обновить модель, когда я внесу сумму
Ответ №1:
Для версии вы можете просто использовать —
data.update = await Wallet.update(
{
available: available,
comments: new Date()
},
{
where: { cid: wallet_info.cid }
}
);
доступная переменная может быть установлена с использованием условия if else после выполнения вышеуказанного запроса на обновление.
Комментарии:
1. кошелек = ожидает Wallet.update(wallet_info, { где: { cid: wallet_info.cid } });
2. после добавления этих строк выполняется ошибка (по умолчанию): ВЫБЕРИТЕ
id
,cid
,deposit
withdrawal
,available
comments
online
ИЗwallet
КАКwallet
ГДЕwallet
.cid
= ’33’ ПОРЯДОК ПОwallet
.id
ОГРАНИЧЕНИЕ НА УДАЛЕНИЕ 1; Выполняется (по умолчанию):wallet
НАБОРcid
ОБНОВЛЕНИЙ=’33’,deposit
=25, ГДЕcid
= ’33’ доступный баланс: 53562075 [ 0, доступно: 53562075, комментарии: 2019-03-16T09:47:19.723Z ] Ошибка без перехвата { filename: ‘\cl-api-master\controllers\WalletController.js ‘, строка: 86, строка: 37, сообщение: ‘wallet.save не является функцией’, тип: ‘TypeError’,3. Пожалуйста, поделитесь всей вашей функцией, при которой возникает ошибка
4. Пожалуйста, смотрите — pastebin.com/2fUhEaBH Не стесняйтесь задавать любые вопросы, которые у вас могут возникнуть
5. rohit обновляет весь доступный баланс в базе данных, но я хочу обновить последнюю запись таблицы кошелька, используя cid..