Sailsjs:如何为REST API转换POST请求的正文/字段

时间:2015-05-06 10:20:25

标签: rest sails.js

sails将如何为我自动生成REST API,真是太棒了。但是,如何在REST路由中添加额外的处理?例如,我可能有POST /users路由来创建新用户,并且它接受password作为用户模型的属性之一。但是,我不想按原样存储密码;相反,我想要哈希密码和盐,以提高安全性。有没有办法在REST API处理请求之前编写代码,以便我可以转换输入或者在需要时进行某种处理?

1 个答案:

答案 0 :(得分:4)

您可以在用户模型下实施beforeValidatebeforeCreate方法 查看此处的文档http://www.sailsjs.org/#!/documentation/concepts/ORM/Lifecyclecallbacks.html

我将此用作哈希密码:

/**
 * 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/models
 */
module.exports = {
  attributes   : {
    name     : 'string',
    password : {
      type      : 'string',
      required  : true,
      minLength : 6
    },
    email    : {
      type     : 'email',
      unique   : true,
      required : true
    },
    toJSON   : function ()
    {
      var obj = this.toObject();
      delete obj.password;
      return obj;
    }
  },
  beforeCreate : function (attrs, next)
  {
    var bcrypt = require('bcrypt');

    bcrypt.genSalt(10, function (err, salt)
    {
      if (err)
      {
        return next(err);
      }

      bcrypt.hash(attrs.password, salt, function (err, hash)
      {
        if (err)
        {
          return next(err);
        }

        attrs.password = hash;
        next();
      });

    });
  }
};