Node.js未处理的承诺拒绝
我正在尝试使用passport
loginnode.js,但是当数据库中没有的用户名尝试login时遇到问题。 我得到以下错误(node:9708) UnhandledPromiseRejectionWarning: Unhandled promise rejection (rejection id: 1): TypeError: deferred.resolve is not a function
。
loginfunction:
exports.login = function(username, password) { var deferred = Q.defer; MongoClient.connect(mongodbUrl, function(err, db) { var collection = db.collection('users'); collection.findOne({'username' : username}).then(function(result) { if (result === null) { console.log('User not found:', username); deferred.resolve(false); } else { var hash = result.password; console.log('User found:', username); if (bcrypt.compareSync(password, hash)) { deferred.resolve(result); } else { console.log('Authentication for ' + username + 'failed'); deferred.resolve(false); } } db.close(); }); }).catch(err => console.log(err)); return deferred.promise; };
Passport.usefunction:
passport.use('local-signin', new LocalStrategy({passReqToCallback : true}, function(req, username, password, done) { funct.login(username, password).then(function(user) { if (user) { console.log(user.username + 'logged in'); req.session.success = 'Welcome, ' + user.username + '!'; done(null, user); } if (!user) { console.log('Failed login attempt'); req.session.error = 'Your Password or Username is incorrect! Please try again.'; done(null, user); } }).fail(function(err) { console.log(err.body); }); }));
承诺可以解决或拒绝。 你必须为两种情况编程。 将.catch添加到代码的末尾,如下所示:
collection.findOne({'username' : username}).then().catch(err => console.log(err))
- 在Sequelize事务中使用循环和promise
- Nodejs,客户端并不总是接收服务器消息
- 当出现Javascript错误时,Socket.IO会断开并阻止debugging
- 对大多数请求使用socket.io是不是很好,或者我应该只用它来将数据推送到客户端?
- / node_modules / jpegtran-bin / vendor / jpegtran:语法错误:“(”文件中意外
- 将SVG代码转换为node.js中的PNG数据URI
- Zombie.js – 下载文件支持
- 在Windows中将Windows-1252hex值转换为Unicode
- 如何在Node.js中使用Plupload并显示上传的百分比?