gpt4 book ai didi

javascript - 使用 Node.Js 模块,如何在同一模块中使用对象函数?

转载 作者:搜寻专家 更新时间:2023-10-31 23:19:33 24 4
gpt4 key购买 nike

我有一个身份验证模块,其中包含我想在整个服务器上使用的方法。我想在模块本身中使用 rndString() 方法并将其导出以在整个应用程序中以其他方式使用。我做错了什么导致它不起作用?

const crypto = require('crypto');

let sha512 = (password, salt) => {
let hash = crypto.createHmac('sha512', salt);
hash.update(password);
let value = hash.digest('hex');
return {
salt: salt,
passwordHash: value
}
};

module.exports = {
rndString: (length) => {
return crypto.randomBytes(Math.ceil(length/2))
.toString('hex')
.slice(0,length);
},
hashId: (id) => {
let key = crypto.createCipher('aes-128-cbc', 'kranky');
let hash = key.update(id, 'utf8', 'hex');
hash += key.final('hex');
return hash;
},
saltPass: (userpassword) => {
let salt = this.rndString(16);
let passwordData = sha512(userpassword, salt);
return {
hashValue: passwordData.passwordHash,
salt: passwordData.salt
}
},
userSalt: (userpassword, salt) => {
let passwordData = sha512(userpassword, salt);
return passwordData.passwordHash;
}
};

最佳答案

您在分配给此处对象键的函数中引用 rndString 函数作为 this.rndString:

saltPass: (userpassword) => {
let salt = this.rndString(16);
let passwordData = sha512(userpassword, salt);

在这种情况下,this 实际上指的是函数,而不是嵌套函数的对象。您也可以使用 ES6 方法语法来获取正确的上下文:

module.exports = {
rndString(length) {
return crypto.randomBytes(Math.ceil(length/2))
.toString('hex')
.slice(0,length);
},
hashId(id) {
let key = crypto.createCipher('aes-128-cbc', 'kranky');
let hash = key.update(id, 'utf8', 'hex');
hash += key.final('hex');
return hash;
},
saltPass(userpassword) {
let salt = this.rndString(16);
let passwordData = sha512(userpassword, salt);
return {
hashValue: passwordData.passwordHash,
salt: passwordData.salt
}
},
userSalt(userpassword, salt) {
let passwordData = sha512(userpassword, salt);
return passwordData.passwordHash;
}
}

您可以在此处找到有关对象方法简写的良好文档:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/Method_definitions

关于javascript - 使用 Node.Js 模块,如何在同一模块中使用对象函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52488816/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com