错误 [ERR_UNHANDLED_ERROR]:未处理的错误。 (“不正确的论点”)

Posted

技术标签:

【中文标题】错误 [ERR_UNHANDLED_ERROR]:未处理的错误。 (“不正确的论点”)【英文标题】:Error [ERR_UNHANDLED_ERROR]: Unhandled error. ('Incorrect arguments') 【发布时间】:2020-06-16 12:19:01 【问题描述】:

当我想登录时出现此错误

events.js:189

抛出错误; // 未处理的“错误”事件

^

错误 [ERR_UNHANDLED_ERROR]:未处理的错误。 ('不正确的论点')

在 Function.emit (events.js:187:17)

在 E:\My Drive\src 代码\node.js\Revision\regSys\node_modules\mongoose\lib\model.js:4830:13

在 E:\My Drive\src 代码\node.js\Revision\regSys\node_modules\mongoose\lib\query.js:4390:12

在 process.nextTick (E:\My Drive\src code\node.js\Revision\regSys\node_modules\mongoose \lib\query.js:2869:28) 在 process._tickCallback (internal/process/next_tick.js:61:11)

[nodemon] 应用程序崩溃 - 启动前等待文件更改...

架构 (db.js)

const mongoose = require('mongoose');
const bcrypt = require('bcrypt-nodejs');

const stDB = mongoose.Schema(
    email : 
        type: String,
        required: true
    ,
    password : 
        type: String,
        required: true
    
);

stDB.methods.hashPassword = function(password)
    return bcrypt.hashSync(password, bcrypt.genSaltSync(5));

stDB.methods.comparePasswords = (password) => 
    return bcrypt.compareSync(password, this.password)



module.exports = mongoose.model('db', stDB);

config/passport.js

passport.use('local-signin' , new localStrategy(
    usernameField : 'email' ,
    passwordField : 'password' ,
    passReqToCallback : true ,
 , ( req , email , password ,  done)=>


    User.findOne(email : email , (err , user)=>
        if(err)
            return done (err)
        

        if (! user)
            return done( null , false , req.flash('signinError' , 'this user not found'))
        
        if (! user.comparePasswords(password))
            return done(null , false , req.flash('signinError' , 'wrong password'))
        

        return done(null , user)
    )

))

"bcrypt-nodejs": "0.0.3"

“护照”:“^0.4.0”

“本地护照”:“^1.0.0”

“节点”:“10.16.1”

“快递”:“~4.16.1”

【问题讨论】:

检查密码和邮箱是否不为空。 【参考方案1】:

为什么会出现错误:bcrypt-nodejs 在您尝试比较哈希和字符串密码而不传入所需的参数时抛出 Error [ERR_UNHANDLED_ERROR]: Unhandled error. ('Incorrect arguments') 错误。这部分代码是罪魁祸首:

stDB.methods.comparePasswords = (password) => 
    return bcrypt.compareSync(password, this.password)

显然您将两个参数传递给bcrypt.compareSync,这是它所期望的,但是,问题是您使用的是箭头函数并且猫鼬模式方法不能很好地与箭头函数一起使用,有这个警告注意docs:

不要使用 ES6 箭头函数 (=>) 声明方法。箭头函数 明确阻止绑定 this,因此您的方法将无权访问 到文档。

因此,尽管很明显您将两个参数传递给 bcrypt.compareSync,但其中只有一个是有效的,另一个 (this.password) 将是 undefined

修复: 只需将箭头函数替换为函数表达式即可:

stDB.methods.comparePasswords = function (password) 
    return bcrypt.compareSync(password, this.password)

【讨论】:

以上是关于错误 [ERR_UNHANDLED_ERROR]:未处理的错误。 (“不正确的论点”)的主要内容,如果未能解决你的问题,请参考以下文章

Pig 安装错误:错误 pig.Main:错误 2998:未处理的内部错误

Informix 错误:发生了语法错误。错误代码:-201

我收到一个错误:“MetaMask - RPC 错误:错误:错误:[ethjs-rpc] rpc 错误与有效负载”

错误精灵错误跟踪器错误

网页打开显示错误500是啥意思

PHP错误处理