是否有代码模式将使用异步功能创建的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