如何在Sails.js中全局引入模块的最佳实践?

12

我正在构建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();

    });

}

现在,在我的modelcontroller中,我都是使用require('bcrypt')或者var bcrypt = require('bcrypt');这样的方式来在类里面使用它。

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

我倾向于相信Sails.js已经有了相应的解决方案?如果没有,您建议实施的最佳路线是什么?最终,我希望找到最佳实践。

提前致谢!

2个回答

31

由于Node.js模块一旦加载第一次就会被缓存,因此无论是否重复使用require('bcrypt')都不会影响性能。

话虽如此,如果你仍然希望按照自己的方式实现,可以在config/bootstrap.js中要求bcrypt并将其添加到sails命名空间中:

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

  //...

  cb();
}

之后,您就可以在控制器或模型中使用sails.bcrypt


完美,这正是我在寻找的。谢谢! - Brimstone

1
你也可以通过利用全局变量来实现这一点。
module.exports.globals = {
    bcrypt : require('bcrypt')
}

在应用程序代码中,可以像下面这样引用它:
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);
    }
  });

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接