如何扩展帆.js图书馆

How do I extend sails.js library

本文关键字:js 图书馆 扩展 何扩展      更新时间:2023-09-26

我想扩展 sailsjs 以具有类似于 rails 强参数的东西即

req.params.limit(["email", "password", "password_confirmation"])

我已经将其创建为附加组件,但我希望它自动附加到request.params

插件:

limit = function(limiters){
  params = this.all();
  self = Object();
  limiters.forEach(function(limiter){
    if(params[limiter]){
      self[limiter] = params[limiter]
    }
  return self;
}

请求:

req.params.limit = limit;
req.params.limit(["email", "password"]);

我将如何将其作为模块添加到框架中?

我认为您可以创建一个策略

// policies/limit.js
limit = function(limiters){
params = this.all();
self = Object();
limiters.forEach(function(limiter){
  if(params[limiter]){
    self[limiter] = params[limiter]
  }
return self;
}
module.exports = function limit (req, res, next) {
  req.params.limit = limit;
  req.params.limit(["email", "password"]);
  next();
};

然后,您可以在 ./config/policies.js 文件中添加策略。 该示例适用于所有控制器/操作。 上面的链接中是有关如何将其添加到特定操作的文档。

// config/policies.js
module.exports.policies = { 
'*': 'limit'
};

编辑:当然,您可以调用req.params.limit(...); 在控制器中,如果您不希望它在策略中静态。 策略一般只不过是快速中间件

我看到了控制器操作、限制可能的搜索等用例。

另一方面:当您只想让您的模型不占用在创建请求中找到的未定义属性时,您可以简单地将相应模型的 schema 设置为 true:

// models/example.js
module.exports = {
  schema: true,
  attributes: {...}
}

全局设置:

// config/models.js
module.exports.models = {
  schema: true,
  ...
}