最新消息: 电脑我帮您提供丰富的电脑知识,编程学习,软件下载,win7系统下载。

是否有代码模式将使用异步功能创建的bcrypt哈希返回到单独的模块?

IT培训 admin 5浏览 0评论

是否有代码模式将使用异步功能创建的bcrypt哈希返回到单独的模块?

是否有一种优雅的方法可以将bcrypt哈希值返回到单独的模块?

在下面的示例中,函数hashPassword()使用bcrypt哈希密码。它位于文件hashpassword.js中。我想将其哈希值返回给app.js中的变量myHashedPassword。我确信必须有一种蛮力的方法来做到这一点。但是,有什么聪明或优雅的方法可以返回值?

app.js

let password = '123';
let myHashedPassword = hashPassword(password);

hashpassword.js

function hashPassword(password) {
    bcrypt.genSalt(10, function(error, salt) {
        bcrypt.hash(password, salt, function(error, hash) {
            // In most cases at this point hash is saved to the database.
            // However is there a pattern to return its value to the outer function and then app.js?
            // With this being async is that even possible?
        });
    }); 
}
回答如下:

bcrypt程序包与您正在使用的功能具有同步等效项,请参见example。如果您仍想利用异步版本,则需要返回一个Promise,然后可以await例如

function hashPassword(password) {
  return new Promise((resolve, reject) => {
    bcrypt.genSalt(10, (error, salt) => {
      if (error) return reject(error);

      bcrypt.hash(
        password, 
        salt, 
        (error, hash) => err ? reject(err) : resolve(hash)
      );
    }); 
  });
}
...
let hashed = await hashPassword(password);

关于然后以用户只需调用函数的方式导出,如果使用ES6或更高版本的话

export default function hashPassword(password) {
  ...
}

否则

function hashPassword(password) {
  ...
}

module.exports = hashPassword

是否有代码模式将使用异步功能创建的bcrypt哈希返回到单独的模块?

是否有一种优雅的方法可以将bcrypt哈希值返回到单独的模块?

在下面的示例中,函数hashPassword()使用bcrypt哈希密码。它位于文件hashpassword.js中。我想将其哈希值返回给app.js中的变量myHashedPassword。我确信必须有一种蛮力的方法来做到这一点。但是,有什么聪明或优雅的方法可以返回值?

app.js

let password = '123';
let myHashedPassword = hashPassword(password);

hashpassword.js

function hashPassword(password) {
    bcrypt.genSalt(10, function(error, salt) {
        bcrypt.hash(password, salt, function(error, hash) {
            // In most cases at this point hash is saved to the database.
            // However is there a pattern to return its value to the outer function and then app.js?
            // With this being async is that even possible?
        });
    }); 
}
回答如下:

bcrypt程序包与您正在使用的功能具有同步等效项,请参见example。如果您仍想利用异步版本,则需要返回一个Promise,然后可以await例如

function hashPassword(password) {
  return new Promise((resolve, reject) => {
    bcrypt.genSalt(10, (error, salt) => {
      if (error) return reject(error);

      bcrypt.hash(
        password, 
        salt, 
        (error, hash) => err ? reject(err) : resolve(hash)
      );
    }); 
  });
}
...
let hashed = await hashPassword(password);

关于然后以用户只需调用函数的方式导出,如果使用ES6或更高版本的话

export default function hashPassword(password) {
  ...
}

否则

function hashPassword(password) {
  ...
}

module.exports = hashPassword
发布评论

评论列表 (0)

  1. 暂无评论