全局要求Sails.js中的模块的最佳实践?

时间:2014-01-13 17:10:40

标签: javascript bcrypt sails.js

我目前正在构建我的Sails.js应用程序的身份验证部分,使用bcrypt来哈希我的密码。一切都运作良好,这是迄今为止的实施样本:

beforeCreate: function (values, next) {

    require('bcrypt').hash(values.password, 10, function passwordEncrypted(err, encryptedPassword) {

        if (err) return next(err);

        values.password = encryptedPassword;
        next();

    });

}

现在,无论是在model还是在controller,我都在使用require('bcrypt')var bcrypt = require('bcrypt');,因此我可以在课堂上使用它。

我正在寻找一种更好的实践方式来定义var bcrypt = require('bcrypt');一次和全局,以便我可以随时使用bcrypt变量(在其他模型或控制器内)。

我倾向于相信Sails.js已经有了适合的地方吗?如果没有,您建议最佳实施方式是什么?最后,我正在寻找最佳实践。

提前致谢!

2 个答案:

答案 0 :(得分:30)

Node.js modules are cached once they are loaded for the first time起,重新使用require('bcrypt')不会对性能产生任何影响。

也就是说,如果您仍然按照自己的方式行事,可以在bcrypt中要求config/bootstrap.js并将其添加到sails命名空间:

module.exports.bootstrap = function (cb) {
  sails.bcrypt = require('bcrypt');

  //...

  cb();
}

之后,您将能够在控制器或模型中使用sails.bcrypt

答案 1 :(得分:0)

你也可以通过利用全局

来做到这一点
sails.config.globals.bcrypt.hash(password, saltRounds, function (err, hash) {
    if (!err) {
      sails.config.globals.logger.info('creatHash-hash-->', hash);
      return cb(null, hash);
    } else {
      return cb(err);
    }
  });

并在应用程序代码中,请参阅下面的

{{1}}