【问题标题】:Using Node.Js Modules, how do I use an object function in the same module?使用 Node.Js 模块,如何在同一个模块中使用对象函数?
【发布时间】:2018-09-25 08:06:57
【问题描述】:

我有一个身份验证模块,其中包含我想在服务器上使用的方法。我想在模块本身中使用 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;
    }
};

【问题讨论】:

    标签: javascript node.js node-modules


    【解决方案1】:

    您在此处分配给对象键的函数内将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

    【讨论】:

      猜你喜欢
      • 2018-07-19
      • 2018-01-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-04-03
      • 2012-02-20
      相关资源
      最近更新 更多