首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >sails中的条件beforeUpdate

sails中的条件beforeUpdate
EN

Stack Overflow用户
提问于 2014-12-02 19:18:55
回答 6查看 3.3K关注 0票数 3

只有在满足某些条件时,我才需要加密密码。

代码语言:javascript
复制
beforeUpdate: function (value, cb) {
User.findOne(value.id)
  .exec(function (err, originalUser) {
    if (err || !originalUser) {
      return cb();
    }
    //encrypt the password only if the password is not previously encrypted
    if (value.password != originalUser.password) {
       //encrypt the Pwd
    } else {
      cb();
    }
  });

}问题是,值对象只包含更新参数,如何在值对象中获取整个用户对象?

EN

回答 6

Stack Overflow用户

发布于 2015-04-15 15:36:23

更新异步后,此方法不再起作用。

您不能在beforeUpdate中获取整个对象。您可以尝试执行此操作以获取id。var id= this.update.arguments[0]

票数 5
EN

Stack Overflow用户

发布于 2015-02-27 00:10:05

为了扩展user3036010的建议,我最终创建了一个新策略,如下所示:

api/policies/propagateId.js

代码语言:javascript
复制
module.exports = function(req, res, next) {
    var id = req.param('id');
    if (id && req.body) {
        req.body.id = id;
    }

    next();
};

然后将api/config/policies.js文件设置为默认情况下将策略应用于所有控制器和操作:

代码语言:javascript
复制
module.exports.policies = {
    '*': 'propagateId'
};

它的作用是强制在文档正文上设置id属性,这会使更新操作认为id是手动指定的。无论出于什么原因,在更新操作中都有一个代码块来检查这一点,如果没有手动指定id,它将从值中删除它。

这是一种滥用政策,但它似乎对我很好。如果你不想这样做,看起来就像每次你做一个update API请求时在你的请求体中手动指定id应该也可以。

票数 2
EN

Stack Overflow用户

发布于 2014-12-02 20:23:11

我不知道为什么在这里的值对象中需要这个,但是你可以创建一个自定义策略,它将获取整个user对象并发送'next()‘回调进行更新;

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27248102

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档