通过前面的使用,我们可以看出Sails中MVC的结构更倾向于MVP的概念,Presenter在Sails中被称之为Actions:
They often act as a middleman between your models and views.
Controller层这个结构上的变化是Sails v1.0中新提出的方案,Action可以使用classic和actions2两种格式,另外,仍然兼容支持Sails v0.12上的Controller实现方式。相对于肿胀的Controller,将Controller拆分成多个Action可以更清晰的表达业务逻辑,其中actions2格式的Action更是一种半文档半校验器的形式,可以从接口描述、接口参数、参数校验、逻辑、退出方式等方面构建整个业务逻辑。
Actions
Action2 Action
Action2格式的action与Helper基本相似,需要做调整的主要是各种与Controller层职责相关的exit方式。我们来创建一个signup action:
sails generate action user/login
我们可以编写一个用于登录验证的action,从而实现登录业务逻辑:
- Model层
Model层我们使用前面案例中的User Model:
const crypto = require('crypto');
const uuid = require('node-uuid');
module.exports = {
primaryKey: 'uuid',
attributes: {
uuid: {
type: 'string',
required: true,
},
username: {
type: 'string',
required: true,
allowNull: false,
unique: true,
},
password: {
type: 'string',
required: true,
allowNull: false,
},
},
customToJSON: function() {
return _.omit(this, ['password']);
},
beforeCreate: function (valuesToSet, proceed) {
let md5 = crypto.createHash('md5');
valuesToSet.uuid = uuid.v4();
valuesToSet.password = md5.update(valuesToSet.password)