Как вызывать действия по умолчанию по умолчанию в пользовательской переопределенной?

SailsJS предоставляет действия по умолчанию, такие как поиск, обновление, создание и т.д.

Мне нужно переопределить некоторые из них в соответствии с конкретными бизнес-целями. Однако я хотел бы добавить к ним, а не просто переопределить их. Как вызвать действия плана по умолчанию в основном действии.

Например, обновление может обновить запись модели.

update 

Я хочу, чтобы обновление делало больше, помимо обновления записи модели. В моем настраиваемом методе обновления я не хочу дублировать обновление по умолчанию. Как я могу это сделать?

Ответ 1

скопировать все из

PROJECT-ROOT\node_modules\sails\lib\hooks\blueprints\actions

к

PROJECT-ROOT\config\blueprints

Убедитесь, что findOne.js имеет строчный формат. Вам нужно будет изменить каждый из них, чтобы сделать ссылку на местоположение actionUtil.js. Теперь вы можете изменить их в своем сердце, не изобретая колесо.

Ответ 2

Я просто столкнулся с той же проблемой и нашел другой способ ее исправить. Это может помочь в будущем, если у кого-то есть такая же проблема. Наконец, я решил перезаписать действие в контроллере, в моем случае это было add, а затем, после того, как вы сделали что-то внутри, называли действие по умолчанию. Итак, мой код выглядит следующим образом:

add: function (req, res) {
    if (xxx) {
        // I need to do something only when the condition above is met
        Section.count({xxx: xxx)}).exec(function (error, count) {
            if (error) {
                return res.json(500, {error: 'There was an error while trying to run query'});
            }
            //I do what I have to do
            return sails.hooks.blueprints.middleware.add(req, res);
        });
    } else {
        //I just return the default blueprint action
        return sails.hooks.blueprints.middleware.add(req, res);
    }
}

Итак, в основном, функции чертежа по умолчанию хранятся в: sails.hooks.blueprints.middleware

Ответ 3

Вы должны посмотреть обратные вызовы жизненного цикла в sailsjs. Так, например, вы можете использовать beforeUpdate или beforeCreate обратный вызов жизненного цикла, чтобы сделать больше в модели:

var bcrypt = require('bcrypt');

module.exports = {

  attributes: {

    username: {
      type: 'string',
      required: true
    },

    password: {
      type: 'string',
      minLength: 6,
      required: true,
      columnName: 'encrypted_password'
    }

  },


  // Lifecycle Callbacks
  beforeCreate: function (values, cb) {

    // Encrypt password
    bcrypt.hash(values.password, 10, function(err, hash) {
      if(err) return cb(err);
      values.password = hash;
      //calling cb() with an argument returns an error. Useful for canceling the entire operation if some criteria fails.
      cb();
    });
  }
};