【问题标题】:Not a string or buffer. Module Crypto不是字符串或缓冲区。模块加密
【发布时间】:2013-10-06 21:14:09
【问题描述】:

我在模块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 */
    ...
};

【问题讨论】:

  • 对我来说很好。回溯是否真的指向myHash中的代码?
  • 在post方法'test'中,我更新了我的问题。

标签: node.js node-crypto


【解决方案1】:

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

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

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

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

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

如果您不想要额外的.util,请像这样导出:

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

【讨论】:

  • 另外,我在 util.js 中声明了 var myHash。我将解决方案添加到我的问题中。谢谢@robertklep
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-03-03
  • 2021-02-01
  • 1970-01-01
  • 2013-01-16
  • 1970-01-01
  • 2017-12-29
  • 1970-01-01
相关资源
最近更新 更多