【问题标题】:Cannot read property 'then' of undefined, bcrypt.hash()无法读取未定义的属性“then”,bcrypt.hash()
【发布时间】:2018-01-12 20:43:36
【问题描述】:

我正在尝试在我的 mocha 测试的 before 块中创建一个测试用户,我需要对其密码进行哈希处理。 Apparently you don't need a done() function if you use promises。我正在实现 bcrypt.hash,就像它在 bcrypt 文档中所说的那样:

before(function(){
    //create a user and populate user's first recipes

    //create a User object
    return bcrypt.hash('newt', 10).then(function(err,hash){
        //create the user object
        var user = new User({email:'test@test.io',username:'test',password:hash})
        //save that user
        user.save()
    })
})

但是,当我运行测试时,它给了我一个错误:

TypeError: Cannot read property 'then' of undefined

什么给了?谢谢。

【问题讨论】:

  • 看起来您的 bcrypt 没有名为 hash 的函数。
  • 你能完全展示你的before钩子吗?
  • bcrypt.hash() 肯定存在,事实上,如果我删除承诺并将 .then() 函数作为一个简单的回调函数,它就可以正常工作。只是当我添加 .then() 时它才会中断。

标签: node.js promise mocha.js bcrypt


【解决方案1】:

bcrypt.hash('newt', 10) 没有返回承诺。

确保您使用的是最新版本的 bcrypt 和 mocha,因为这些软件包的早期版本不支持 Promise。您也可以尝试重新安装模块。

【讨论】:

  • 感谢您的快速回复。不过我还是有点困惑。我在整个项目中一直在 node.js 中使用 Promise,不需要任何类型的外部库,并且根据 bcrypt 文档,bcrypt Promise 支持现在是原生的,不是吗?为什么这里不一样?
  • 可能与mocha环境有关,不一定与node有关。我将尝试在本地快速测试它以进行检查。我猜 Promise 没有在 mocha 环境中定义。
  • 没关系,我卸载并重新安装了 bcrypt,它现在可以工作了。是时候翻几张桌子了,但至少现在可以了。再次感谢您的帮助!
  • 我进行了编辑,但我并不真正关心这些要点。只是想帮助人们。
  • 另外,我不确定您为什么使用 mocha,但如果您刚刚开始一个项目,我会使用 ava。多线程测试明显快于单线程测试。 npmjs.com/package/ava
猜你喜欢
  • 2017-04-21
  • 2019-08-19
  • 2016-10-23
  • 2014-09-07
  • 2015-09-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多