SailsJs - 覆盖控制器默认方法

时间:2016-12-20 23:46:09

标签: javascript model-view-controller sails.js override

我是SailsJs的新手,我想对默认方法生成的脚手架执行覆盖,例如:

  

创建

所以我们的想法是在默认调用create之前执行someStuff()。基本上,是在脚手架之后出现的默认创建之前添加一些功能,但是我仍然想要调用该功能以避免再次编写代码。

这是我运行的命令。

  sails generate api user

这是我的控制器代码:

 /**
 * UserController
 *
 * @description :: Server-side logic for managing users
 * @help        :: See http://sailsjs.org/#!/documentation/concepts/Controllers
 */

module.exports = {
  create: function (req, res) {
    someStuff();
    call_to_default_create()<--- What to know if posible?
  },        
};

以下是型号代码:

/**
 * User.js
 *
 * @description :: TODO: You might write a short summary of how this model works and what it represents here.
 * @docs        :: http://sailsjs.org/documentation/concepts/models-and-orm/models
 */

module.exports = {
  attributes: {
    name: {
      type: 'string',
      required: true,
      minLength: 2
    },
    last_name: {
      type: 'string',
      required: true,
      minLength: 2
    },
    email: {
      type: 'string',
      email: true,
      required: true,
      unique: true
    },
    encrypted_password: {
      type: 'string'
    }
  }
}

我认为Sails的工作方式不是继承,但我可以以某种方式模仿这个吗?

2 个答案:

答案 0 :(得分:1)

您正在寻找sails.hooks.blueprints.middleware.create(req, res);。因此,您的自定义create方法将是:

/**
 * UserController
 *
 * @description :: Server-side logic for managing users
 * @help        :: See http://sailsjs.org/#!/documentation/concepts/Controllers
 */

module.exports = {
  create: function (req, res) {
    someStuff();
    return sails.hooks.blueprints.middleware.create(req, res);
  },        
};

我无法在任何地方找到实际记录的蓝图覆盖,因此请自行承担风险。 =)

答案 1 :(得分:1)

create 方法之前,还有另一种执行代码的方法:Lifecycle callbacks

您可以直接在模型中在 create 方法之前或之后执行方法。

module.exports = {
    attributes: {
        name: {
            type: 'string',
            required: true,
            minLength: 2
        },
        last_name: {
            type: 'string',
            required: true,
            minLength: 2
        },
        password: {
            type: 'string',
            required: true,
            minLength: 10,
        },
    },

    beforeCreate: (valuesToSet, proceed) => {
        sails.helpers.passwords.hashPassword(valuesToSet.password).exec((err, hashedPassword) => {
            if (err) { return proceed(err); }
            valuesToSet.password = hashedPassword;
            return proceed();
        });
    }
}