不是字符串或缓冲区。模块加密

时间:2013-10-06 21:14:09

标签: node.js node-crypto

我在模块util.js上创建了一个函数myHash(),以便在我的代码的不同部分重用但不能正常工作。

错误讯息: this._binding.update(data, encoding); Not a string or buffer.

app.js

...
GLOBAL.util = require('./util');
GLOBAL.dateFormat = util.dateFormat;
GLOBAL.myHash = util.myHash; /***** My function *****/
...

app.post('/test', function(req, res){
    ...
    var pass_shasum = myHash('test');
...

util.js中

var crypto = require('crypto');
function myHash(msg) {
    return crypto.createHash('sha256').update(msg).digest('hex');
}

exports.util = {
    ...
    myHash: myHash(),
    ...
};

有什么建议吗?


解决方案:

修改 util.js

var crypto = require('crypto');

/* Define var */
var myHash = function (msg) {
    return crypto.createHash('sha256').update(msg).digest('hex');
};

module.exports = {
    ...
    myHash: myHash, /* Is a variable not a method. Thanks @robertklep */
    ...
};

1 个答案:

答案 0 :(得分:3)

您不应该在exports语句中执行该函数(msg参数将是undefined,它确实不是字符串或缓冲区):

exports.util = {
    ...
    myHash: myHash, // don't use myHash()
    ...
};

此外,当您像这样导出代码时,您必须像这样要求:

GLOBAL.util = require('./util').util;

(虽然我建议不要使用全局变量)。

如果您不想要额外的.util,请按以下方式导出:

module.exports = {
  ...
  myHash : myHash,
  ...
};