错误 [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:未处理的内部错误