how to call default blueprint actions in a custom overridden one?

后端 未结 3 1173
情歌与酒
情歌与酒 2021-02-08 04:21

SailsJS provides default blueprint actions, such as find, update, create, etc.

I need to override some of them to suit particular business purposes. However, I would lik

相关标签:
3条回答
  • 2021-02-08 05:02

    I just came across the same issue and found a different way to fix it. It may help in the future if someone has the same problem. What I finally did was to re-write the action in the controller, in my case it was add and then, after doing some stuff inside, called the default blueprint's action. So, my code looks like below:

    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's action
            return sails.hooks.blueprints.middleware.add(req, res);
        }
    }
    

    So, basically, default blueprint functions are stored in: sails.hooks.blueprints.middleware

    0 讨论(0)
  • 2021-02-08 05:03

    You should look at lifecycle callbacks in sailsjs. So for example, you can use beforeUpdate or beforeCreate lifecycle callback to do more in the model:

    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();
        });
      }
    };
    
    0 讨论(0)
  • 2021-02-08 05:10

    copy everything from

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

    to

    PROJECT-ROOT\config\blueprints
    

    Make sure findOne.js is lowercase. You will need to modify each one to make reference to the location of actionUtil.js. You can now modify these at your hearts content without re-inventing the wheel.

    0 讨论(0)
提交回复
热议问题