Как изменить данные определенного столбца с помощью перехватов в Node.js ? (Продолжение, Postgresql)

#node.js #postgresql #migration #sequelize.js

#node.js #postgresql #миграция #sequelize.js

Вопрос:

Я добавил новый столбец в свою старую таблицу в базе данных postgresql с помощью миграции и присвоил этому столбцу значение по умолчанию.

 'use strict';

module.exports = {
  up: async (queryInterface, Sequelize) => {
    return Promise.all([
      queryInterface.addColumn(
        'notifications', // table name
        'flag', // new field name
        {
          type: Sequelize.INTEGER,
          defaultValue: 0,
          allowNull: false,
        },
      ),
    ]);
  },

  down: async (queryInterface, Sequelize) => {
  }
};
 

Теперь я хочу перейти к конкретным значениям этого столбца. Как я могу это сделать с помощью перехватов или сервиса? Я новичок в node.js я буду очень признателен вам за помощь.

Мой notifications.model.js

 const Sequelize = require('sequelize');
const DataTypes = Sequelize.DataTypes;


module.exports = function (app) {
  const sequelizeClient = app.get('sequelizeClient');
  const notifications = sequelizeClient.define('notifications', {
    senderId: {
      type: DataTypes.INTEGER,
      allowNull: false
    },
    recipientId: {
      type: DataTypes.INTEGER,
      allowNull: false
    },
    notificationtype: {
      type: DataTypes.STRING,
      allowNull: false
    },
    postId:{
      type:DataTypes.INTEGER,
      allowNull:true
    },
    conversationId:{
      type:DataTypes.INTEGER,
      allowNull:true
    }
  },
  
  );
  return notifications;
};
 

Это мои уведомления.hooks.js .
Что я должен добавить, чтобы обновить флаг до 1?

 const { authenticate } = require('@feathersjs/authentication').hooks;
const authHooks = require('feathers-authentication-hooks');

const { fastJoin, discard, disallow } = require('feathers-hooks-common');

const acquireNotification = require('../../hooks/notifications/acquire_notification');
const relateWithUser = require('../../hooks/notifications/relate_with_users');


const reverse = require('../../hooks/common/reverse');

module.exports = {
  before: {
    
    all: [
      authenticate('jwt'),
      
      reverse(),
      

    ],
    find: [
      acquireNotification(),
      reverse()
    ],
    get: [
      acquireNotification()
    ],
    create: [
      authHooks.associateCurrentUser({
        idField: 'id',
        as: 'senderId'
      }),
    ],
    update: [
    ],
    patch: [
    ],
    remove: [
    ]
  },

  after: {
    all: [],
    find: [
      fastJoin(relateWithUser),
    ],
    get: [],
    create: [
      fastJoin(relateWithUser),
    ],
    update: [],
    patch: [],
    remove: []
  },

  error: {
    all: [],
    find: [],
    get: [],
    create: [],
    update: [],
    patch: [],
    remove: []
  }
};

 

Комментарии:

1. Вы хотите обновить некоторые записи и установить flag значение поля для этих записей на указанное значение?

2. Да, я пытаюсь это сделать :/

3. Вы определяете модели с помощью Sequelize? Если да, покажите их

4. Я редактирую свой вопрос, чтобы показать

Ответ №1:

Вам нужно добавить flag столбец в notifications модель:

 flag:{
      type:DataTypes.INTEGER,
      allowNull:false
    }
 

И затем вы можете обновить некоторые записи с определенными условиями, подобными этому:

 await notifications.update({
  flag: 1 // desired value
}, {
  where: {
    notificationtype: 'type' // indicate a desired condition here
  }
});
 

Комментарии:

1. Спасибо за это, но я не могу добавить это в свои хуки, не могли бы вы еще раз проверить мой вопрос? Я добавил свой hooks.js