使用节点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
。