使用节点js和mongodb时出现多个连接错误

我正在使用位于我的/routes/schema.js文件中的以下架构…

 var mongoose = require('mongoose'); var Schema = mongoose.Schema; var userSchema = new Schema({ username: String, password: String, name: String, last: String, year: Number, degree: String }); var User = mongoose.model('User', userSchema); module.exports = { User: User } 

在我的/routes/register.js文件中,我正在使用POST数据存储一些信息…

 var User = require('../routes/schema').User; exports.postRegister = function (req, res) { var u = new User({ username: req.body.reg_username, password: req.body.reg_password, name: req.body.reg_name, last: req.body.reg_lastname, year: req.body.reg_year, degree: req.body.reg_degree }); u.save(function (err) { if (err) { throw err; } else { console.log("saved"); res.render('index', { title: 'Express' }); } }); } 

一切都得到妥善保存在我的数据库。 但现在,这个register.js文件将用户redirect回到/routes/index.js ,用户必须使用存储在数据库中的某些凭证login。

所以在我的index.js文件中,我需要检查用户名和密码是否存在于我的数据库集合中,我尝试了以下…

 var User = require('../routes/schema').User; exports.signin = function (req, res) { User.findOne({ username: req.body.log_username, password: req.body.log_password }, function (err, docs) { if (docs.length) { console.log("name exists"); } else { console.log("no exist"); } }); }; 

我使用相同架构的findOne函数来检查用户名和密码是否存在于数据库中的一个集合中,但是它不能正常工作。 我似乎得到一个多连接错误,我不知道如何避免它。

当我尝试使用数据库中已有的某些证书​​进行login时,控制台打印出no exist意思是在exports.signin的else语句已到达。

试试docs.length !== 0这是检查文档字段是否存在或为空。

如果在集合中找不到对象,则docs的值将为null

如果用户input错误的凭证,你将会在空对象上调用docs.length ,这会导致错误。 使用docs != null来代替,以避免在null对象上调用length