Как обновить в nodejs с помощью sequelize

#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..