我是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的工作方式不是继承,但我可以以某种方式模仿这个吗?
答案 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();
});
}
}